chainerでlinkはimportの際にLとする
import chainer.links as L
活性化関数はF
import chainer.functions as F
linkやfunctionをまとめて管理するのがchain
class MyNeuralNet(chainer.Chain):
from chainer import Chain, optimizers, Variable
import chainer.functions as F
import chainer.links as L
import numpy as np
from sklearn import datasets, model_selection
import seaborn as sns
import matplotlib.pyplot as plt
class MLP(Chain):
def __init__(self, n_hid=100, n_out=10):
super().__init__()
<b>
with self.init_scope():
self.l1 = L.Liner(None, n_hid)
self.l2 = L.Linear(n_hid, n_out)
def __call__(self, x):
hid = F.relu(self.l1(x))
return self.l2(hid)</b>
iris = datasets.load_iris()
train_data, test_data, train_label, test_label = model_selection.train_test_split(iris.data.astype(np.float32),iris.target)
model = MLP(20, 3)
optimizer = optimizers.SGD()
optimizer.setup(model)
train_data_variable = Variable(train_data.astype(np.float32))
train_label_variable = Variable(train_label.astype(np.int32))
loss_log = []
for epoch in range(200):
model.cleargrads()
prod_label = model(train_data_variable)
loss = F.softmax_cross_entropy(prod_label, train_label_variable)
loss.backward()
optimizer.update()
loss_log.append(loss.data)
plt.plot(loss_log)
ん?
全結合層、ランプ関数の使い方、隠れ層の扱い、フォワードプロパゲーションなどがいまいち理解できん。。
損失関数を計算してから、パラメータを更新?
全結合層は、特徴量の取り出し(畳み込みフィルタ、ReLU、プーリング層)後に、特徴量に基づく分類を行う
ランプ関数は、f(x)= max(0,x)
一変数の実関数であり、独立変数とその絶対値の平均として容易に求められる?
隠れ層は、入力層、出力層の間
Softmax関数:多くの次元からなる入力のうち、自分の値が他の値たちに比べて一番目立っているならば、その値が11に近づく関数
フォワードプロパゲーション:レイヤーを進める方向に計算
あれ、NNでいう学習とは、パラメータの更新をforeachなどで繰り返し処理するってこと??