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などで繰り返し処理するってこと??