はじめに
この記事はゼロから作るディープラーニング 7章学習に関するテクニックを自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。
ハイパーパラメータとは
ハイパーパラメータとは、ニューラルネットワークの作成の時に必要となる人間の力で設定しないといけないパラメータのことを言います。例を出すと、層の数やニューロンの数などです。
このハイパーパラメータはニューラルネットワークの性能に大きく関わってきますので、ぜひ最適化したいですが、人間の力でとなるとすごく大変です。
そこで、これも機械に任せようということで、これからハイパーパラメータの最適値を自動で求める実装をしてみます。
やることを簡単にいうと、ランダムな値をハイパーパラメータにして学習の結果をはかり、その結果から最適な値の範囲を絞っていきます。
# ハイパーパラメータチューニング
from sklearn.model_selection import train_test_split
def hayper_tyning(lr_m, lr_d, wd_m, wd_d, x_train, t_train, sanpule = 2):
lr_list = []
wd_list = []
x_train = x_train[:500]
t_train = t_train[:500]# 時間がものすごくかかるため
(train_x, hayper_x, train_t, hayper_t) = train_test_split(x_train, t_train, test_size=0.2, random_state=0)
for i in range(sanpule):
train_acc_list = []
test_acc_list = []
lr = 10 ** np.random.uniform(lr_d, lr_m)
weight_decay_lambda = 10 ** np.random.uniform(wd_d, wd_m)
lr_list.append(lr)
wd_list.append(weight_decay_lambda)
network = MutiLayerNet(input_size = 784, hiden_size_list = [50], output_size = 10, weight_decay_lambda = weight_decay_lambda)
for i in range(1, 101):
grads = network.gradient(train_x, train_t)
for p in ['W1','b1','W2','b2']:
network.params[p] = network.params[p] - (lr * grads[p])
if i % 100 == 0:
train_acc = network.accuracy(train_x, train_t)
test_acc = network.accuracy(hayper_x, hayper_t)
train_acc_list.append(train_acc)
test_acc_list.append(test_acc)
#後はグラフだったり絞り込んだりする