Использование пакета глубокой нейронной сети Chainer для обучения простого набора данных

Я пытаюсь использовать пакет chainer для большого проекта, над которым я работаю. Я прочитал учебник на их веб-сайте, в котором приводится пример его применения к набору данных MNIST, но, похоже, его нелегко масштабировать на другие примеры, а в остальном просто недостаточно документации.

Их примерный код выглядит следующим образом:

class MLP(Chain):
    def __init__(self, n_units, n_out):
        super(MLP, self).__init__(
            # the size of the inputs to each layer will be inferred
            l1=L.Linear(None, n_units),  # n_in -> n_units
            l2=L.Linear(None, n_units),  # n_units -> n_units
            l3=L.Linear(None, n_out),    # n_units -> n_out
        )

    def __call__(self, x):
        h1 = F.relu(self.l1(x))
        h2 = F.relu(self.l2(h1))
        y = self.l3(h2)
        return y

train, test = datasets.get_mnist()
train_iter = iterators.SerialIterator(train, batch_size=5, shuffle=True)
test_iter = iterators.SerialIterator(test, batch_size=2, repeat=False, shuffle=False)
model = L.Classifier(MLP(100, 10))  # the input size, 784, is inferred
optimizer = optimizers.SGD()
optimizer.setup(model)
updater = training.StandardUpdater(train_iter, optimizer)
trainer = training.Trainer(updater, (4, 'epoch'), out='result')
trainer.extend(extensions.Evaluator(test_iter, model))
trainer.extend(extensions.LogReport())
trainer.extend(extensions.PrintReport(['epoch', 'main/accuracy', 'validation/main/accuracy']))
trainer.extend(extensions.ProgressBar())
trainer.run()  

Может ли кто-нибудь указать мне, как просто подобрать прямую линию к нескольким точкам данных в 2D? Если я смогу понять простую подгонку, такую ​​​​как эта, я смогу соответствующим образом масштабировать.

Спасибо за помощь!


person Keir Simmons    schedule 12.12.2016    source источник
comment
Иметь функцию стоимости, основанную на наименьшем евклидовом расстоянии   -  person Natecat    schedule 12.12.2016
comment
Я понимаю, как это сделать математически, мой вопрос больше сосредоточен на том, как это сделать конкретно с помощью пакета chainer.   -  person Keir Simmons    schedule 12.12.2016


Ответы (1)


Я вставил здесь простое регрессионное моделирование.

Вы можете использовать исходные данные поезда и тестовые данные в виде кортежа. поезд = (данные, метка)

Здесь data.shape = (количество данных, количество измерений данных)

И, label.shape = (количество данных)

Оба их типа данных должны быть numpy.float32.

import chainer
from chainer.functions import *
from chainer.links import *
from chainer.optimizers import *

from chainer import training
from chainer.training import extensions
from chainer import reporter
from chainer import datasets
import numpy


class MyNet(chainer.Chain):

    def __init__(self):
        super(MyNet, self).__init__(
            l0=Linear(None, 30, nobias=True),
            l1=Linear(None, 1, nobias=True),
        )

    def __call__(self, x, t):
        l0 = self.l0(x)
        f0 = relu(l0)
        l1 = self.l1(f0)
        f1 = flatten(l1)
        self.loss = mean_squared_error(f1, t)
        reporter.report({'loss': self.loss}, self)
        return self.loss


def get_optimizer():
    return Adam()


def training_main():
    model = MyNet()

    optimizer = get_optimizer()
    optimizer.setup(model)

    train, test = datasets.get_mnist(label_dtype=numpy.float32)
    train_iter = chainer.iterators.SerialIterator(train, 50)
    test_iter = chainer.iterators.SerialIterator(test, 50,
                                                 repeat=False,
                                                 shuffle=False)

    updater = training.StandardUpdater(train_iter, optimizer)
    trainer = training.Trainer(updater, (10, 'epoch'))
    trainer.extend(extensions.ProgressBar())
    trainer.extend(extensions.Evaluator(test_iter, model))
    trainer.extend(
        extensions.PlotReport(['main/loss', 'validation/main/loss'],
                              'epoch'))
    trainer.run()


if __name__ == '__main__':
    training_main()
person fukatani    schedule 25.03.2017