[PYTHON] Perceptron multicouche avec chaînette: ajustement fonctionnel

Dans le but d'étudier Chainer, implémentez les sujets décrits dans Enregistrement absolu sur l'intelligence artificielle_Approximation fonctionnelle par perceptron multicouche en utilisant Chainer. Vu.

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)

Le problème de régression est résolu en renvoyant l'erreur quadratique en tant que fonction d'erreur. Encore une fois, la mise en garde est de savoir comment passer la valeur à Variable. Chainer semble être implémenté sur la prémisse de l'apprentissage mini-batch, et l'apprentissage mini-batch est effectué en entrant [[vecteur d'entrée 1], [vecteur d'entrée 2], ...]. Pour l'apprentissage en ligne, vous devez ajouter une autre parenthèse, telle que [[Input Vector 1]].

Recommended Posts

Perceptron multicouche avec chaînette: ajustement fonctionnel
[Chainer] Apprentissage de XOR avec perceptron multicouche
Faire un circuit logique avec Perceptron (Perceptron multicouche)
Seq2Seq (1) avec chainer
Classification d'image MNIST (numéro manuscrit) avec Perceptron multicouche
Apprentissage automatique x diagnostic d'application Web: Reconnaître CAPTCHA avec perceptron multicouche (édition Chainer)
Prévision de stock avec TensorFlow (perceptron multicouche: MLP) ~ Prévision de stock 2 ~
Ajustement de fonction (à l'aide de Keras)
Utiliser tensorboard avec Chainer
Montage du modèle avec lmfit
Régression linéaire multiple, régression logistique, perceptron multicouche, encodeur automatique, Chainer Yo!
Essayez l'optimisation des fonctions avec Optuna
Essayez d'implémenter RBM avec chainer.
Fonction sinueuse approximative avec TensorFlow
Apprenez les orbites elliptiques avec Chainer
Effectuer des opérations logiques à l'aide de Perceptron
Seq2Seq (3) ~ Edition CopyNet ~ avec chainer
Utilisation du chainer avec Jetson TK1
Réseau de neurones commençant par Chainer
Votre Perceptron multicouche est sale
Implémentation du GAN conditionnel avec chainer
[Python] Ajustement de courbe avec polypoly
Génération de légende d'image avec Chainer
Implémentation de SmoothGrad avec Chainer v2
Clustering embarqué profond avec Chainer 2.0
Un peu coincé dans le chainer
Zura avec fonction softmax implémentée