chainer의 작법 그 2

2343 단어 sinChainer

개요



chainer의 작법, 조사해 보았다.
회귀.

가져오기


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

교육 데이터 세트 반복



-3.0 ~ +3.0의 100점
sin이 교사 데이터
dataset, iterator는 사용하지 않습니다.
    X = np.linspace(-3.0, 3.0, num = 100, dtype = np.float32)
    T = np.sin(X)

미니 배치에 대한 전처리



에포크는 300
미니 배치는 100
    n_epoch = 300
    n_batch = 100

신경망의 Forward/backward 계산



회귀이므로 활성화 함수는 tanh
loss는 mean_squared
class MLP(Chain):
    def __init__(self):
        super(MLP, self).__init__(l1 = L.Linear(1, 20), l2 = L.Linear(20, 1), )
    def __call__(self, x):
        h = F.tanh(self.l1(x))
        out = self.l2(h)
        return out

class M_fit(Chain):
    def __init__(self, predictor):
        super(M_fit, self).__init__(predictor = predictor)
    def __call__(self, x, t):
        y = self.predictor(x)
        loss = F.mean_squared_error(y, t) * 0.5
        return loss
    def predict(self, x):
        y = self.predictor(x)
        return y

매개변수 업데이트



옵티마이저는 Adam
optimizer = optimizers.Adam()
    optimizer.setup(model)

평가 데이터 세트에서 현재 파라미터 평가



Variable에 데이터를 흘려 넣는다.
    for epoch in range(n_epoch):
        indexes = np.random.permutation(np.size(X))
        for i in range(n_batch):
            model.zerograds()
            x = Variable(np.array([[X[indexes[i]]]], dtype = np.float32))
            t = Variable(np.array([[T[indexes[i]]]], dtype = np.float32))
            loss = model(x, t)
            loss.backward()
            optimizer.update()

중간 결과를 로그에 남기기



에포크와 loss.
        print ('epoch : ', epoch, 'loss : ', loss.data)


결과



좋은 느낌.



이상.

좋은 웹페이지 즐겨찾기