[PYTHON] Mehrschichtiges Perzeptron mit Kette: Funktionsanpassung

Implementieren Sie zum Studium von Chainer die unter Erstellung künstlicher Intelligenz_Funktionale Approximation durch mehrschichtiges Perceptron beschriebenen Dinge mit Chainer. Sah.

fitting_with_MLP.py


import numpy as np
import matplotlib.pyplot as plt
import chainer
from chainer import cuda, Function, gradient_check, Variable, optimizers, serializers, utils
from chainer import Link, Chain, ChainList
import chainer.functions as F
import chainer.links as L

class MyChain(Chain):
    def __init__(self):
        super(MyChain, self).__init__(
            l1 = L.Linear(1, 10),
            l2 = L.Linear(10, 1),
        )

    def __call__(self, x):
        h = F.sigmoid(self.l1(x))
        out = self.l2(h)
        return out

class MyModel_fitting(Chain):
    def __init__(self, predictor):
        super(MyModel_fitting, self).__init__(predictor=predictor)

    def __call__(self, x, t):
        y = self.predictor(x)
        loss = F.mean_squared_error(y,t)*0.5
#        loss = (y-t)*(y-t)*0.5
        return loss

    def predict(self, x):
        y = self.predictor(x)
        return y

if __name__ == "__main__":
    #---Loading training data---#
    train_x = np.linspace(0.0, 1.0, num=1000, dtype=np.float32)
    train_y = train_x*train_x
    n_epoch = 1000
    n_batch = 100

    model = MyModel_fitting(MyChain())
#    serializers.load_hdf5('MyChain.model', model)
    optimizer = optimizers.Adam()
    optimizer.setup(model)

    for epoch in range(n_epoch):
        print 'epoch : ', epoch
        indexes = np.random.permutation(np.size(train_x))
        for i in range(n_batch):
            model.zerograds()
            x = Variable(np.array([[train_x[indexes[i]]]], dtype=np.float32))
            t = Variable(np.array([[train_y[indexes[i]]]], dtype=np.float32))
            loss = model(x, t)
            loss.backward()
            optimizer.update()
        print 'loss : ', loss.data

    learned_y = np.zeros_like(train_y)
    for i in range(np.size(learned_y)):
        x = Variable(np.array([[train_x[i]]], dtype=np.float32))
        learned_y[i] = model.predict(x).data[0,0]

    plt.plot(train_x, train_y, 'o')
    plt.plot(train_x, learned_y)
    plt.show()
    serializers.save_hdf5('MyChain.model', model)

Das Regressionsproblem wird gelöst, indem der quadratische Fehler als Fehlerfunktion zurückgegeben wird. Wiederum ist die Einschränkung, wie der Wert an Variable übergeben wird. Chainer scheint unter der Voraussetzung des Mini-Batch-Lernens implementiert zu sein, und das Mini-Batch-Lernen wird durch Eingabe von [[Eingabevektor 1], [Eingabevektor 2], ...] durchgeführt. Für das Online-Lernen müssen Sie eine weitere Klammer hinzufügen, z. B. [[Eingabevektor 1]].

Recommended Posts

Mehrschichtiges Perzeptron mit Kette: Funktionsanpassung
[Chainer] Lernen von XOR mit mehrschichtigem Perzeptron
Machen Sie eine Logikschaltung mit Perceptron (Multilayer Perceptron)
Seq2Seq (1) mit Chainer
MNIST-Bildklassifizierung (handschriftliche Nummer) mit mehrschichtigem Perzeptron
Maschinelles Lernen x Webanwendungsdiagnose: Erkennen von CAPTCHA mit mehrschichtigem Perzeptron (Chainer Edition)
Aktienkursprognose mit TensorFlow (mehrschichtiges Perceptron: MLP) ~ Aktienprognose 2 ~
Funktionsanpassung (mit Keras)
Verwenden Sie Tensorboard mit Chainer
Modellbefestigung mit lmfit
Lineare multiple Regression, logistische Regression, mehrschichtiges Perzeptron, Auto-Encoder, Chainer Yo!
Versuchen Sie die Funktionsoptimierung mit Optuna
Versuchen Sie, RBM mit Chainer zu implementieren.
Ungefähre Sinusfunktion mit TensorFlow
Lernen Sie mit Chainer elliptische Bahnen
Führen Sie logische Operationen mit Perceptron aus
Seq2Seq (3) ~ CopyNet Edition ~ mit Chainer
Verwendung von Chainer mit Jetson TK1
Neuronales Netz beginnend mit Chainer
Ihr mehrschichtiges Perceptron ist schmutzig
Bedingte GAN mit Chainer implementiert
[Python] Kurvenanpassung mit Polypolyse
Bildunterschriftengenerierung mit Chainer
SmoothGrad mit Chainer v2 implementiert
Deep Embedded Clustering mit Chainer 2.0
Ein bisschen im Kettenschiff stecken
Zura mit Softmax-Funktion implementiert