準備

Googleドライブのマウント

In [1]:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive

sys.pathの設定

以下では,Googleドライブのマイドライブ直下にDNN_codeフォルダを置くことを仮定しています.必要に応じて,パスを変更してください.

In [2]:
import sys
sys.path.append('/content/drive/My Drive/DNN_code_colab_ver200425')

vanishing gradient

sigmoid - gauss

In [4]:
import numpy as np
from common import layers
from collections import OrderedDict
from common import functions
from data.mnist import load_mnist
import matplotlib.pyplot as plt

# mnistをロード
(x_train, d_train), (x_test, d_test) = load_mnist(normalize=True, one_hot_label=True)
train_size = len(x_train)

print("データ読み込み完了")

# 重み初期値補正係数
wieght_init = 0.01
#入力層サイズ
input_layer_size = 784
#中間層サイズ
hidden_layer_1_size = 40
hidden_layer_2_size = 20

#出力層サイズ
output_layer_size = 10
# 繰り返し数
iters_num = 2000
# ミニバッチサイズ
batch_size = 100
# 学習率
learning_rate = 0.1
# 描写頻度
plot_interval=10

# 初期設定
def init_network():
    network = {} 
    network['W1'] = wieght_init * np.random.randn(input_layer_size, hidden_layer_1_size)
    network['W2'] = wieght_init * np.random.randn(hidden_layer_1_size, hidden_layer_2_size)
    network['W3'] = wieght_init * np.random.randn(hidden_layer_2_size, output_layer_size)

    network['b1'] = np.zeros(hidden_layer_1_size)
    network['b2'] = np.zeros(hidden_layer_2_size)
    network['b3'] = np.zeros(output_layer_size)

    return network

# 順伝播
def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    hidden_f = functions.sigmoid
    
    u1 =  np.dot(x, W1) + b1
    z1 = hidden_f(u1)
    u2 =  np.dot(z1, W2) + b2
    z2 = hidden_f(u2)
    u3 =  np.dot(z2, W3) + b3
    y = functions.softmax(u3)
 
    return z1, z2, y

# 誤差逆伝播
def backward(x, d, z1, z2, y):
    grad = {}
    
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    hidden_d_f = functions.d_sigmoid
    last_d_f = functions.d_softmax_with_loss
    
    
    # 出力層でのデルタ
    delta3 = last_d_f(d, y)
    # b3の勾配
    grad['b3'] = np.sum(delta3, axis=0)
    # W3の勾配
    grad['W3'] = np.dot(z2.T, delta3)
    # 2層でのデルタ
    delta2 = np.dot(delta3, W3.T) * hidden_d_f(z2)
    # b2の勾配
    grad['b2'] = np.sum(delta2, axis=0)
    # W2の勾配
    grad['W2'] = np.dot(z1.T, delta2)
    # 1層でのデルタ
    delta1 = np.dot(delta2, W2.T) * hidden_d_f(z1)
    # b1の勾配
    grad['b1'] = np.sum(delta1, axis=0)
    # W1の勾配
    grad['W1'] = np.dot(x.T, delta1)

    return grad

# パラメータの初期化
network = init_network()

accuracies_train = []
accuracies_test = []

# 正答率
def accuracy(x, d):
    z1, z2, y = forward(network, x)
    y = np.argmax(y, axis=1)
    if d.ndim != 1 : d = np.argmax(d, axis=1)
    accuracy = np.sum(y == d) / float(x.shape[0])
    return accuracy

for i in range(iters_num):
    # ランダムにバッチを取得    
    batch_mask = np.random.choice(train_size, batch_size)
    # ミニバッチに対応する教師訓練画像データを取得    
    x_batch = x_train[batch_mask]
    # ミニバッチに対応する訓練正解ラベルデータを取得する
    d_batch = d_train[batch_mask]


    
    z1, z2, y = forward(network, x_batch)
    grad = backward(x_batch, d_batch, z1, z2, y)

    if (i+1)%plot_interval==0:
        accr_test = accuracy(x_test, d_test)
        accuracies_test.append(accr_test)
        
        accr_train = accuracy(x_batch, d_batch)
        accuracies_train.append(accr_train)

        print('Generation: ' + str(i+1) + '. 正答率(トレーニング) = ' + str(accr_train))
        print('                : ' + str(i+1) + '. 正答率(テスト) = ' + str(accr_test))

    # パラメータに勾配適用
    for key in ('W1', 'W2', 'W3', 'b1', 'b2', 'b3'):
        network[key]  -= learning_rate * grad[key]


lists = range(0, iters_num, plot_interval)
plt.plot(lists, accuracies_train, label="training set")
plt.plot(lists, accuracies_test,  label="test set")
plt.legend(loc="lower right")
plt.title("accuracy")
plt.xlabel("count")
plt.ylabel("accuracy")
plt.ylim(0, 1.0)
# グラフの表示
plt.show()
データ読み込み完了
Generation: 10. 正答率(トレーニング) = 0.09
                : 10. 正答率(テスト) = 0.1009
Generation: 20. 正答率(トレーニング) = 0.08
                : 20. 正答率(テスト) = 0.1135
Generation: 30. 正答率(トレーニング) = 0.06
                : 30. 正答率(テスト) = 0.1135
Generation: 40. 正答率(トレーニング) = 0.12
                : 40. 正答率(テスト) = 0.1135
Generation: 50. 正答率(トレーニング) = 0.1
                : 50. 正答率(テスト) = 0.1135
Generation: 60. 正答率(トレーニング) = 0.11
                : 60. 正答率(テスト) = 0.1135
Generation: 70. 正答率(トレーニング) = 0.09
                : 70. 正答率(テスト) = 0.101
Generation: 80. 正答率(トレーニング) = 0.1
                : 80. 正答率(テスト) = 0.1028
Generation: 90. 正答率(トレーニング) = 0.12
                : 90. 正答率(テスト) = 0.1135
Generation: 100. 正答率(トレーニング) = 0.11
                : 100. 正答率(テスト) = 0.1135
Generation: 110. 正答率(トレーニング) = 0.18
                : 110. 正答率(テスト) = 0.1135
Generation: 120. 正答率(トレーニング) = 0.13
                : 120. 正答率(テスト) = 0.1135
Generation: 130. 正答率(トレーニング) = 0.06
                : 130. 正答率(テスト) = 0.1135
Generation: 140. 正答率(トレーニング) = 0.1
                : 140. 正答率(テスト) = 0.101
Generation: 150. 正答率(トレーニング) = 0.14
                : 150. 正答率(テスト) = 0.1135
Generation: 160. 正答率(トレーニング) = 0.11
                : 160. 正答率(テスト) = 0.1135
Generation: 170. 正答率(トレーニング) = 0.17
                : 170. 正答率(テスト) = 0.1135
Generation: 180. 正答率(トレーニング) = 0.11
                : 180. 正答率(テスト) = 0.1135
Generation: 190. 正答率(トレーニング) = 0.06
                : 190. 正答率(テスト) = 0.1032
Generation: 200. 正答率(トレーニング) = 0.13
                : 200. 正答率(テスト) = 0.0958
Generation: 210. 正答率(トレーニング) = 0.08
                : 210. 正答率(テスト) = 0.1032
Generation: 220. 正答率(トレーニング) = 0.16
                : 220. 正答率(テスト) = 0.1028
Generation: 230. 正答率(トレーニング) = 0.12
                : 230. 正答率(テスト) = 0.1135
Generation: 240. 正答率(トレーニング) = 0.13
                : 240. 正答率(テスト) = 0.1135
Generation: 250. 正答率(トレーニング) = 0.09
                : 250. 正答率(テスト) = 0.1135
Generation: 260. 正答率(トレーニング) = 0.06
                : 260. 正答率(テスト) = 0.1028
Generation: 270. 正答率(トレーニング) = 0.13
                : 270. 正答率(テスト) = 0.1135
Generation: 280. 正答率(トレーニング) = 0.04
                : 280. 正答率(テスト) = 0.1135
Generation: 290. 正答率(トレーニング) = 0.08
                : 290. 正答率(テスト) = 0.1135
Generation: 300. 正答率(トレーニング) = 0.13
                : 300. 正答率(テスト) = 0.1135
Generation: 310. 正答率(トレーニング) = 0.09
                : 310. 正答率(テスト) = 0.1135
Generation: 320. 正答率(トレーニング) = 0.1
                : 320. 正答率(テスト) = 0.101
Generation: 330. 正答率(トレーニング) = 0.14
                : 330. 正答率(テスト) = 0.1135
Generation: 340. 正答率(トレーニング) = 0.11
                : 340. 正答率(テスト) = 0.1135
Generation: 350. 正答率(トレーニング) = 0.09
                : 350. 正答率(テスト) = 0.1135
Generation: 360. 正答率(トレーニング) = 0.15
                : 360. 正答率(テスト) = 0.101
Generation: 370. 正答率(トレーニング) = 0.08
                : 370. 正答率(テスト) = 0.1135
Generation: 380. 正答率(トレーニング) = 0.05
                : 380. 正答率(テスト) = 0.1135
Generation: 390. 正答率(トレーニング) = 0.07
                : 390. 正答率(テスト) = 0.1135
Generation: 400. 正答率(トレーニング) = 0.09
                : 400. 正答率(テスト) = 0.1135
Generation: 410. 正答率(トレーニング) = 0.05
                : 410. 正答率(テスト) = 0.1009
Generation: 420. 正答率(トレーニング) = 0.1
                : 420. 正答率(テスト) = 0.0974
Generation: 430. 正答率(トレーニング) = 0.1
                : 430. 正答率(テスト) = 0.1135
Generation: 440. 正答率(トレーニング) = 0.09
                : 440. 正答率(テスト) = 0.1028
Generation: 450. 正答率(トレーニング) = 0.06
                : 450. 正答率(テスト) = 0.1135
Generation: 460. 正答率(トレーニング) = 0.13
                : 460. 正答率(テスト) = 0.1135
Generation: 470. 正答率(トレーニング) = 0.06
                : 470. 正答率(テスト) = 0.1135
Generation: 480. 正答率(トレーニング) = 0.05
                : 480. 正答率(テスト) = 0.101
Generation: 490. 正答率(トレーニング) = 0.09
                : 490. 正答率(テスト) = 0.1135
Generation: 500. 正答率(トレーニング) = 0.07
                : 500. 正答率(テスト) = 0.1135
Generation: 510. 正答率(トレーニング) = 0.15
                : 510. 正答率(テスト) = 0.1135
Generation: 520. 正答率(トレーニング) = 0.1
                : 520. 正答率(テスト) = 0.0982
Generation: 530. 正答率(トレーニング) = 0.07
                : 530. 正答率(テスト) = 0.0982
Generation: 540. 正答率(トレーニング) = 0.13
                : 540. 正答率(テスト) = 0.1028
Generation: 550. 正答率(トレーニング) = 0.05
                : 550. 正答率(テスト) = 0.1028
Generation: 560. 正答率(トレーニング) = 0.1
                : 560. 正答率(テスト) = 0.1135
Generation: 570. 正答率(トレーニング) = 0.09
                : 570. 正答率(テスト) = 0.1135
Generation: 580. 正答率(トレーニング) = 0.08
                : 580. 正答率(テスト) = 0.0958
Generation: 590. 正答率(トレーニング) = 0.11
                : 590. 正答率(テスト) = 0.1009
Generation: 600. 正答率(トレーニング) = 0.1
                : 600. 正答率(テスト) = 0.1135
Generation: 610. 正答率(トレーニング) = 0.16
                : 610. 正答率(テスト) = 0.1135
Generation: 620. 正答率(トレーニング) = 0.13
                : 620. 正答率(テスト) = 0.1135
Generation: 630. 正答率(トレーニング) = 0.18
                : 630. 正答率(テスト) = 0.1135
Generation: 640. 正答率(トレーニング) = 0.12
                : 640. 正答率(テスト) = 0.1135
Generation: 650. 正答率(トレーニング) = 0.2
                : 650. 正答率(テスト) = 0.1135
Generation: 660. 正答率(トレーニング) = 0.12
                : 660. 正答率(テスト) = 0.1135
Generation: 670. 正答率(トレーニング) = 0.11
                : 670. 正答率(テスト) = 0.1135
Generation: 680. 正答率(トレーニング) = 0.16
                : 680. 正答率(テスト) = 0.1135
Generation: 690. 正答率(トレーニング) = 0.14
                : 690. 正答率(テスト) = 0.1135
Generation: 700. 正答率(トレーニング) = 0.15
                : 700. 正答率(テスト) = 0.1135
Generation: 710. 正答率(トレーニング) = 0.11
                : 710. 正答率(テスト) = 0.1135
Generation: 720. 正答率(トレーニング) = 0.12
                : 720. 正答率(テスト) = 0.1135
Generation: 730. 正答率(トレーニング) = 0.09
                : 730. 正答率(テスト) = 0.1135
Generation: 740. 正答率(トレーニング) = 0.1
                : 740. 正答率(テスト) = 0.1135
Generation: 750. 正答率(トレーニング) = 0.08
                : 750. 正答率(テスト) = 0.1135
Generation: 760. 正答率(トレーニング) = 0.17
                : 760. 正答率(テスト) = 0.1135
Generation: 770. 正答率(トレーニング) = 0.12
                : 770. 正答率(テスト) = 0.1135
Generation: 780. 正答率(トレーニング) = 0.13
                : 780. 正答率(テスト) = 0.1135
Generation: 790. 正答率(トレーニング) = 0.1
                : 790. 正答率(テスト) = 0.1135
Generation: 800. 正答率(トレーニング) = 0.07
                : 800. 正答率(テスト) = 0.1028
Generation: 810. 正答率(トレーニング) = 0.08
                : 810. 正答率(テスト) = 0.1135
Generation: 820. 正答率(トレーニング) = 0.1
                : 820. 正答率(テスト) = 0.1135
Generation: 830. 正答率(トレーニング) = 0.08
                : 830. 正答率(テスト) = 0.1135
Generation: 840. 正答率(トレーニング) = 0.12
                : 840. 正答率(テスト) = 0.1135
Generation: 850. 正答率(トレーニング) = 0.06
                : 850. 正答率(テスト) = 0.1135
Generation: 860. 正答率(トレーニング) = 0.05
                : 860. 正答率(テスト) = 0.1028
Generation: 870. 正答率(トレーニング) = 0.11
                : 870. 正答率(テスト) = 0.1135
Generation: 880. 正答率(トレーニング) = 0.13
                : 880. 正答率(テスト) = 0.1135
Generation: 890. 正答率(トレーニング) = 0.13
                : 890. 正答率(テスト) = 0.1135
Generation: 900. 正答率(トレーニング) = 0.17
                : 900. 正答率(テスト) = 0.1135
Generation: 910. 正答率(トレーニング) = 0.13
                : 910. 正答率(テスト) = 0.1135
Generation: 920. 正答率(トレーニング) = 0.09
                : 920. 正答率(テスト) = 0.1135
Generation: 930. 正答率(トレーニング) = 0.13
                : 930. 正答率(テスト) = 0.1135
Generation: 940. 正答率(トレーニング) = 0.1
                : 940. 正答率(テスト) = 0.1135
Generation: 950. 正答率(トレーニング) = 0.11
                : 950. 正答率(テスト) = 0.1135
Generation: 960. 正答率(トレーニング) = 0.12
                : 960. 正答率(テスト) = 0.1135
Generation: 970. 正答率(トレーニング) = 0.1
                : 970. 正答率(テスト) = 0.1135
Generation: 980. 正答率(トレーニング) = 0.11
                : 980. 正答率(テスト) = 0.1135
Generation: 990. 正答率(トレーニング) = 0.1
                : 990. 正答率(テスト) = 0.1028
Generation: 1000. 正答率(トレーニング) = 0.17
                : 1000. 正答率(テスト) = 0.1135
Generation: 1010. 正答率(トレーニング) = 0.04
                : 1010. 正答率(テスト) = 0.1135
Generation: 1020. 正答率(トレーニング) = 0.1
                : 1020. 正答率(テスト) = 0.1028
Generation: 1030. 正答率(トレーニング) = 0.06
                : 1030. 正答率(テスト) = 0.1135
Generation: 1040. 正答率(トレーニング) = 0.11
                : 1040. 正答率(テスト) = 0.0958
Generation: 1050. 正答率(トレーニング) = 0.12
                : 1050. 正答率(テスト) = 0.1135
Generation: 1060. 正答率(トレーニング) = 0.13
                : 1060. 正答率(テスト) = 0.1135
Generation: 1070. 正答率(トレーニング) = 0.08
                : 1070. 正答率(テスト) = 0.1135
Generation: 1080. 正答率(トレーニング) = 0.13
                : 1080. 正答率(テスト) = 0.1135
Generation: 1090. 正答率(トレーニング) = 0.14
                : 1090. 正答率(テスト) = 0.1135
Generation: 1100. 正答率(トレーニング) = 0.07
                : 1100. 正答率(テスト) = 0.1135
Generation: 1110. 正答率(トレーニング) = 0.13
                : 1110. 正答率(テスト) = 0.1135
Generation: 1120. 正答率(トレーニング) = 0.13
                : 1120. 正答率(テスト) = 0.1135
Generation: 1130. 正答率(トレーニング) = 0.11
                : 1130. 正答率(テスト) = 0.1028
Generation: 1140. 正答率(トレーニング) = 0.06
                : 1140. 正答率(テスト) = 0.1135
Generation: 1150. 正答率(トレーニング) = 0.1
                : 1150. 正答率(テスト) = 0.1135
Generation: 1160. 正答率(トレーニング) = 0.08
                : 1160. 正答率(テスト) = 0.101
Generation: 1170. 正答率(トレーニング) = 0.13
                : 1170. 正答率(テスト) = 0.1135
Generation: 1180. 正答率(トレーニング) = 0.05
                : 1180. 正答率(テスト) = 0.1028
Generation: 1190. 正答率(トレーニング) = 0.07
                : 1190. 正答率(テスト) = 0.1135
Generation: 1200. 正答率(トレーニング) = 0.11
                : 1200. 正答率(テスト) = 0.101
Generation: 1210. 正答率(トレーニング) = 0.1
                : 1210. 正答率(テスト) = 0.101
Generation: 1220. 正答率(トレーニング) = 0.17
                : 1220. 正答率(テスト) = 0.101
Generation: 1230. 正答率(トレーニング) = 0.14
                : 1230. 正答率(テスト) = 0.1135
Generation: 1240. 正答率(トレーニング) = 0.1
                : 1240. 正答率(テスト) = 0.1135
Generation: 1250. 正答率(トレーニング) = 0.1
                : 1250. 正答率(テスト) = 0.1135
Generation: 1260. 正答率(トレーニング) = 0.11
                : 1260. 正答率(テスト) = 0.1135
Generation: 1270. 正答率(トレーニング) = 0.1
                : 1270. 正答率(テスト) = 0.101
Generation: 1280. 正答率(トレーニング) = 0.08
                : 1280. 正答率(テスト) = 0.1135
Generation: 1290. 正答率(トレーニング) = 0.09
                : 1290. 正答率(テスト) = 0.1135
Generation: 1300. 正答率(トレーニング) = 0.09
                : 1300. 正答率(テスト) = 0.1135
Generation: 1310. 正答率(トレーニング) = 0.06
                : 1310. 正答率(テスト) = 0.1135
Generation: 1320. 正答率(トレーニング) = 0.08
                : 1320. 正答率(テスト) = 0.0958
Generation: 1330. 正答率(トレーニング) = 0.11
                : 1330. 正答率(テスト) = 0.0958
Generation: 1340. 正答率(トレーニング) = 0.08
                : 1340. 正答率(テスト) = 0.0958
Generation: 1350. 正答率(トレーニング) = 0.09
                : 1350. 正答率(テスト) = 0.1135
Generation: 1360. 正答率(トレーニング) = 0.09
                : 1360. 正答率(テスト) = 0.1135
Generation: 1370. 正答率(トレーニング) = 0.18
                : 1370. 正答率(テスト) = 0.1135
Generation: 1380. 正答率(トレーニング) = 0.13
                : 1380. 正答率(テスト) = 0.1135
Generation: 1390. 正答率(トレーニング) = 0.12
                : 1390. 正答率(テスト) = 0.1135
Generation: 1400. 正答率(トレーニング) = 0.13
                : 1400. 正答率(テスト) = 0.1135
Generation: 1410. 正答率(トレーニング) = 0.2
                : 1410. 正答率(テスト) = 0.1135
Generation: 1420. 正答率(トレーニング) = 0.09
                : 1420. 正答率(テスト) = 0.1135
Generation: 1430. 正答率(トレーニング) = 0.1
                : 1430. 正答率(テスト) = 0.1028
Generation: 1440. 正答率(トレーニング) = 0.07
                : 1440. 正答率(テスト) = 0.1135
Generation: 1450. 正答率(トレーニング) = 0.07
                : 1450. 正答率(テスト) = 0.1028
Generation: 1460. 正答率(トレーニング) = 0.02
                : 1460. 正答率(テスト) = 0.1028
Generation: 1470. 正答率(トレーニング) = 0.1
                : 1470. 正答率(テスト) = 0.101
Generation: 1480. 正答率(トレーニング) = 0.13
                : 1480. 正答率(テスト) = 0.101
Generation: 1490. 正答率(トレーニング) = 0.14
                : 1490. 正答率(テスト) = 0.1135
Generation: 1500. 正答率(トレーニング) = 0.11
                : 1500. 正答率(テスト) = 0.1135
Generation: 1510. 正答率(トレーニング) = 0.08
                : 1510. 正答率(テスト) = 0.0958
Generation: 1520. 正答率(トレーニング) = 0.11
                : 1520. 正答率(テスト) = 0.1135
Generation: 1530. 正答率(トレーニング) = 0.12
                : 1530. 正答率(テスト) = 0.1135
Generation: 1540. 正答率(トレーニング) = 0.1
                : 1540. 正答率(テスト) = 0.1135
Generation: 1550. 正答率(トレーニング) = 0.08
                : 1550. 正答率(テスト) = 0.0958
Generation: 1560. 正答率(トレーニング) = 0.14
                : 1560. 正答率(テスト) = 0.1009
Generation: 1570. 正答率(トレーニング) = 0.14
                : 1570. 正答率(テスト) = 0.1135
Generation: 1580. 正答率(トレーニング) = 0.09
                : 1580. 正答率(テスト) = 0.1032
Generation: 1590. 正答率(トレーニング) = 0.05
                : 1590. 正答率(テスト) = 0.098
Generation: 1600. 正答率(トレーニング) = 0.08
                : 1600. 正答率(テスト) = 0.1009
Generation: 1610. 正答率(トレーニング) = 0.09
                : 1610. 正答率(テスト) = 0.1135
Generation: 1620. 正答率(トレーニング) = 0.07
                : 1620. 正答率(テスト) = 0.1009
Generation: 1630. 正答率(トレーニング) = 0.09
                : 1630. 正答率(テスト) = 0.1028
Generation: 1640. 正答率(トレーニング) = 0.14
                : 1640. 正答率(テスト) = 0.1135
Generation: 1650. 正答率(トレーニング) = 0.11
                : 1650. 正答率(テスト) = 0.1009
Generation: 1660. 正答率(トレーニング) = 0.1
                : 1660. 正答率(テスト) = 0.1028
Generation: 1670. 正答率(トレーニング) = 0.09
                : 1670. 正答率(テスト) = 0.1028
Generation: 1680. 正答率(トレーニング) = 0.14
                : 1680. 正答率(テスト) = 0.1028
Generation: 1690. 正答率(トレーニング) = 0.14
                : 1690. 正答率(テスト) = 0.1135
Generation: 1700. 正答率(トレーニング) = 0.07
                : 1700. 正答率(テスト) = 0.1135
Generation: 1710. 正答率(トレーニング) = 0.11
                : 1710. 正答率(テスト) = 0.1135
Generation: 1720. 正答率(トレーニング) = 0.06
                : 1720. 正答率(テスト) = 0.1135
Generation: 1730. 正答率(トレーニング) = 0.11
                : 1730. 正答率(テスト) = 0.1135
Generation: 1740. 正答率(トレーニング) = 0.18
                : 1740. 正答率(テスト) = 0.1135
Generation: 1750. 正答率(トレーニング) = 0.12
                : 1750. 正答率(テスト) = 0.1135
Generation: 1760. 正答率(トレーニング) = 0.14
                : 1760. 正答率(テスト) = 0.1135
Generation: 1770. 正答率(トレーニング) = 0.08
                : 1770. 正答率(テスト) = 0.1135
Generation: 1780. 正答率(トレーニング) = 0.07
                : 1780. 正答率(テスト) = 0.1135
Generation: 1790. 正答率(トレーニング) = 0.11
                : 1790. 正答率(テスト) = 0.1028
Generation: 1800. 正答率(トレーニング) = 0.11
                : 1800. 正答率(テスト) = 0.101
Generation: 1810. 正答率(トレーニング) = 0.08
                : 1810. 正答率(テスト) = 0.1135
Generation: 1820. 正答率(トレーニング) = 0.09
                : 1820. 正答率(テスト) = 0.1028
Generation: 1830. 正答率(トレーニング) = 0.13
                : 1830. 正答率(テスト) = 0.1135
Generation: 1840. 正答率(トレーニング) = 0.13
                : 1840. 正答率(テスト) = 0.1135
Generation: 1850. 正答率(トレーニング) = 0.12
                : 1850. 正答率(テスト) = 0.1032
Generation: 1860. 正答率(トレーニング) = 0.1
                : 1860. 正答率(テスト) = 0.1135
Generation: 1870. 正答率(トレーニング) = 0.15
                : 1870. 正答率(テスト) = 0.1135
Generation: 1880. 正答率(トレーニング) = 0.17
                : 1880. 正答率(テスト) = 0.1135
Generation: 1890. 正答率(トレーニング) = 0.08
                : 1890. 正答率(テスト) = 0.1135
Generation: 1900. 正答率(トレーニング) = 0.15
                : 1900. 正答率(テスト) = 0.1028
Generation: 1910. 正答率(トレーニング) = 0.1
                : 1910. 正答率(テスト) = 0.1135
Generation: 1920. 正答率(トレーニング) = 0.04
                : 1920. 正答率(テスト) = 0.1135
Generation: 1930. 正答率(トレーニング) = 0.13
                : 1930. 正答率(テスト) = 0.1135
Generation: 1940. 正答率(トレーニング) = 0.11
                : 1940. 正答率(テスト) = 0.1135
Generation: 1950. 正答率(トレーニング) = 0.15
                : 1950. 正答率(テスト) = 0.1135
Generation: 1960. 正答率(トレーニング) = 0.14
                : 1960. 正答率(テスト) = 0.1135
Generation: 1970. 正答率(トレーニング) = 0.14
                : 1970. 正答率(テスト) = 0.1135
Generation: 1980. 正答率(トレーニング) = 0.07
                : 1980. 正答率(テスト) = 0.1028
Generation: 1990. 正答率(トレーニング) = 0.14
                : 1990. 正答率(テスト) = 0.1028
Generation: 2000. 正答率(トレーニング) = 0.07
                : 2000. 正答率(テスト) = 0.1028

ReLU - gauss

In [5]:
import numpy as np
from data.mnist import load_mnist
from PIL import Image
import pickle
from common import functions
import matplotlib.pyplot as plt

# mnistをロード
(x_train, d_train), (x_test, d_test) = load_mnist(normalize=True, one_hot_label=True)
train_size = len(x_train)

print("データ読み込み完了")

# 重み初期値補正係数
wieght_init = 0.01
#入力層サイズ
input_layer_size = 784
#中間層サイズ
hidden_layer_1_size = 40
hidden_layer_2_size = 20

#出力層サイズ
output_layer_size = 10
# 繰り返し数
iters_num = 2000
# ミニバッチサイズ
batch_size = 100
# 学習率
learning_rate = 0.1
# 描写頻度
plot_interval=10

# 初期設定
def init_network():
    network = {} 

    network['W1'] = wieght_init * np.random.randn(input_layer_size, hidden_layer_1_size)
    network['W2'] = wieght_init * np.random.randn(hidden_layer_1_size, hidden_layer_2_size)
    network['W3'] = wieght_init * np.random.randn(hidden_layer_2_size, output_layer_size)
            
    network['b1'] = np.zeros(hidden_layer_1_size)
    network['b2'] = np.zeros(hidden_layer_2_size)
    network['b3'] = np.zeros(output_layer_size)

    return network

# 順伝播
def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    ###########  変更箇所  ##############

    hidden_f = functions.relu

    #################################
    
    u1 =  np.dot(x, W1) + b1
    z1 = hidden_f(u1)
    u2 =  np.dot(z1, W2) + b2
    z2 = hidden_f(u2)
    u3 =  np.dot(z2, W3) + b3
    y = functions.softmax(u3)
 
    return z1, z2, y

# 誤差逆伝播
def backward(x, d, z1, z2, y):
    grad = {}
    
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    ###########  変更箇所  ##############
    
    hidden_d_f = functions.d_relu
    
    #################################
    
    
    # 出力層でのデルタ
    delta3 = functions.d_softmax_with_loss(d, y)
    # b3の勾配
    grad['b3'] = np.sum(delta3, axis=0)
    # W3の勾配
    grad['W3'] = np.dot(z2.T, delta3)
    # 2層でのデルタ
    delta2 = np.dot(delta3, W3.T) * hidden_d_f(z2)
    # b2の勾配
    grad['b2'] = np.sum(delta2, axis=0)
    # W2の勾配
    grad['W2'] = np.dot(z1.T, delta2)
    # 1層でのデルタ
    delta1 = np.dot(delta2, W2.T) * hidden_d_f(z1)
    # b1の勾配
    grad['b1'] = np.sum(delta1, axis=0)
    # W1の勾配
    grad['W1'] = np.dot(x.T, delta1)

    return grad

# パラメータの初期化
network = init_network()

accuracies_train = []
accuracies_test = []

# 正答率
def accuracy(x, d):
    z1, z2, y = forward(network, x)
    y = np.argmax(y, axis=1)
    if d.ndim != 1 : d = np.argmax(d, axis=1)
    accuracy = np.sum(y == d) / float(x.shape[0])
    return accuracy

for i in range(iters_num):
    # ランダムにバッチを取得    
    batch_mask = np.random.choice(train_size, batch_size)
    # ミニバッチに対応する教師訓練画像データを取得    
    x_batch = x_train[batch_mask]
    # ミニバッチに対応する訓練正解ラベルデータを取得する
    d_batch = d_train[batch_mask]


    
    z1, z2, y = forward(network, x_batch)
    grad = backward(x_batch, d_batch, z1, z2, y)

    if (i+1)%plot_interval==0:
        accr_test = accuracy(x_test, d_test)
        accuracies_test.append(accr_test)
        
        accr_train = accuracy(x_batch, d_batch)
        accuracies_train.append(accr_train)

        print('Generation: ' + str(i+1) + '. 正答率(トレーニング) = ' + str(accr_train))
        print('                : ' + str(i+1) + '. 正答率(テスト) = ' + str(accr_test))
        
    # パラメータに勾配適用
    for key in ('W1', 'W2', 'W3', 'b1', 'b2', 'b3'):
        network[key]  -= learning_rate * grad[key]


lists = range(0, iters_num, plot_interval)
plt.plot(lists, accuracies_train, label="training set")
plt.plot(lists, accuracies_test,  label="test set")
plt.legend(loc="lower right")
plt.title("accuracy")
plt.xlabel("count")
plt.ylabel("accuracy")
plt.ylim(0, 1.0)
# グラフの表示
plt.show()
データ読み込み完了
Generation: 10. 正答率(トレーニング) = 0.17
                : 10. 正答率(テスト) = 0.0982
Generation: 20. 正答率(トレーニング) = 0.1
                : 20. 正答率(テスト) = 0.1135
Generation: 30. 正答率(トレーニング) = 0.13
                : 30. 正答率(テスト) = 0.1135
Generation: 40. 正答率(トレーニング) = 0.13
                : 40. 正答率(テスト) = 0.1135
Generation: 50. 正答率(トレーニング) = 0.13
                : 50. 正答率(テスト) = 0.1135
Generation: 60. 正答率(トレーニング) = 0.07
                : 60. 正答率(テスト) = 0.1135
Generation: 70. 正答率(トレーニング) = 0.07
                : 70. 正答率(テスト) = 0.1135
Generation: 80. 正答率(トレーニング) = 0.14
                : 80. 正答率(テスト) = 0.1135
Generation: 90. 正答率(トレーニング) = 0.1
                : 90. 正答率(テスト) = 0.1135
Generation: 100. 正答率(トレーニング) = 0.11
                : 100. 正答率(テスト) = 0.1135
Generation: 110. 正答率(トレーニング) = 0.07
                : 110. 正答率(テスト) = 0.1135
Generation: 120. 正答率(トレーニング) = 0.09
                : 120. 正答率(テスト) = 0.1135
Generation: 130. 正答率(トレーニング) = 0.08
                : 130. 正答率(テスト) = 0.1135
Generation: 140. 正答率(トレーニング) = 0.1
                : 140. 正答率(テスト) = 0.1135
Generation: 150. 正答率(トレーニング) = 0.11
                : 150. 正答率(テスト) = 0.1135
Generation: 160. 正答率(トレーニング) = 0.08
                : 160. 正答率(テスト) = 0.1135
Generation: 170. 正答率(トレーニング) = 0.11
                : 170. 正答率(テスト) = 0.1135
Generation: 180. 正答率(トレーニング) = 0.08
                : 180. 正答率(テスト) = 0.1135
Generation: 190. 正答率(トレーニング) = 0.09
                : 190. 正答率(テスト) = 0.1135
Generation: 200. 正答率(トレーニング) = 0.1
                : 200. 正答率(テスト) = 0.1135
Generation: 210. 正答率(トレーニング) = 0.18
                : 210. 正答率(テスト) = 0.1135
Generation: 220. 正答率(トレーニング) = 0.09
                : 220. 正答率(テスト) = 0.1135
Generation: 230. 正答率(トレーニング) = 0.11
                : 230. 正答率(テスト) = 0.1135
Generation: 240. 正答率(トレーニング) = 0.11
                : 240. 正答率(テスト) = 0.1135
Generation: 250. 正答率(トレーニング) = 0.14
                : 250. 正答率(テスト) = 0.1135
Generation: 260. 正答率(トレーニング) = 0.05
                : 260. 正答率(テスト) = 0.1135
Generation: 270. 正答率(トレーニング) = 0.15
                : 270. 正答率(テスト) = 0.1135
Generation: 280. 正答率(トレーニング) = 0.13
                : 280. 正答率(テスト) = 0.1135
Generation: 290. 正答率(トレーニング) = 0.04
                : 290. 正答率(テスト) = 0.1135
Generation: 300. 正答率(トレーニング) = 0.14
                : 300. 正答率(テスト) = 0.1135
Generation: 310. 正答率(トレーニング) = 0.09
                : 310. 正答率(テスト) = 0.1135
Generation: 320. 正答率(トレーニング) = 0.17
                : 320. 正答率(テスト) = 0.1135
Generation: 330. 正答率(トレーニング) = 0.09
                : 330. 正答率(テスト) = 0.1135
Generation: 340. 正答率(トレーニング) = 0.08
                : 340. 正答率(テスト) = 0.1135
Generation: 350. 正答率(トレーニング) = 0.12
                : 350. 正答率(テスト) = 0.1135
Generation: 360. 正答率(トレーニング) = 0.14
                : 360. 正答率(テスト) = 0.1135
Generation: 370. 正答率(トレーニング) = 0.11
                : 370. 正答率(テスト) = 0.1135
Generation: 380. 正答率(トレーニング) = 0.16
                : 380. 正答率(テスト) = 0.1135
Generation: 390. 正答率(トレーニング) = 0.07
                : 390. 正答率(テスト) = 0.1135
Generation: 400. 正答率(トレーニング) = 0.17
                : 400. 正答率(テスト) = 0.1135
Generation: 410. 正答率(トレーニング) = 0.08
                : 410. 正答率(テスト) = 0.1135
Generation: 420. 正答率(トレーニング) = 0.19
                : 420. 正答率(テスト) = 0.1135
Generation: 430. 正答率(トレーニング) = 0.13
                : 430. 正答率(テスト) = 0.1135
Generation: 440. 正答率(トレーニング) = 0.11
                : 440. 正答率(テスト) = 0.1135
Generation: 450. 正答率(トレーニング) = 0.16
                : 450. 正答率(テスト) = 0.1135
Generation: 460. 正答率(トレーニング) = 0.14
                : 460. 正答率(テスト) = 0.1135
Generation: 470. 正答率(トレーニング) = 0.15
                : 470. 正答率(テスト) = 0.1135
Generation: 480. 正答率(トレーニング) = 0.13
                : 480. 正答率(テスト) = 0.1135
Generation: 490. 正答率(トレーニング) = 0.13
                : 490. 正答率(テスト) = 0.1135
Generation: 500. 正答率(トレーニング) = 0.13
                : 500. 正答率(テスト) = 0.1135
Generation: 510. 正答率(トレーニング) = 0.08
                : 510. 正答率(テスト) = 0.1135
Generation: 520. 正答率(トレーニング) = 0.09
                : 520. 正答率(テスト) = 0.1135
Generation: 530. 正答率(トレーニング) = 0.13
                : 530. 正答率(テスト) = 0.1135
Generation: 540. 正答率(トレーニング) = 0.1
                : 540. 正答率(テスト) = 0.1135
Generation: 550. 正答率(トレーニング) = 0.08
                : 550. 正答率(テスト) = 0.1135
Generation: 560. 正答率(トレーニング) = 0.15
                : 560. 正答率(テスト) = 0.1135
Generation: 570. 正答率(トレーニング) = 0.12
                : 570. 正答率(テスト) = 0.1135
Generation: 580. 正答率(トレーニング) = 0.11
                : 580. 正答率(テスト) = 0.1145
Generation: 590. 正答率(トレーニング) = 0.14
                : 590. 正答率(テスト) = 0.1792
Generation: 600. 正答率(トレーニング) = 0.16
                : 600. 正答率(テスト) = 0.1892
Generation: 610. 正答率(トレーニング) = 0.21
                : 610. 正答率(テスト) = 0.171
Generation: 620. 正答率(トレーニング) = 0.15
                : 620. 正答率(テスト) = 0.1807
Generation: 630. 正答率(トレーニング) = 0.24
                : 630. 正答率(テスト) = 0.1826
Generation: 640. 正答率(トレーニング) = 0.19
                : 640. 正答率(テスト) = 0.1851
Generation: 650. 正答率(トレーニング) = 0.19
                : 650. 正答率(テスト) = 0.2011
Generation: 660. 正答率(トレーニング) = 0.25
                : 660. 正答率(テスト) = 0.2253
Generation: 670. 正答率(トレーニング) = 0.14
                : 670. 正答率(テスト) = 0.2156
Generation: 680. 正答率(トレーニング) = 0.25
                : 680. 正答率(テスト) = 0.2473
Generation: 690. 正答率(トレーニング) = 0.26
                : 690. 正答率(テスト) = 0.2487
Generation: 700. 正答率(トレーニング) = 0.33
                : 700. 正答率(テスト) = 0.326
Generation: 710. 正答率(トレーニング) = 0.4
                : 710. 正答率(テスト) = 0.3611
Generation: 720. 正答率(トレーニング) = 0.34
                : 720. 正答率(テスト) = 0.3863
Generation: 730. 正答率(トレーニング) = 0.39
                : 730. 正答率(テスト) = 0.4486
Generation: 740. 正答率(トレーニング) = 0.49
                : 740. 正答率(テスト) = 0.4636
Generation: 750. 正答率(トレーニング) = 0.56
                : 750. 正答率(テスト) = 0.4946
Generation: 760. 正答率(トレーニング) = 0.41
                : 760. 正答率(テスト) = 0.5028
Generation: 770. 正答率(トレーニング) = 0.53
                : 770. 正答率(テスト) = 0.5281
Generation: 780. 正答率(トレーニング) = 0.41
                : 780. 正答率(テスト) = 0.5386
Generation: 790. 正答率(トレーニング) = 0.54
                : 790. 正答率(テスト) = 0.538
Generation: 800. 正答率(トレーニング) = 0.53
                : 800. 正答率(テスト) = 0.5638
Generation: 810. 正答率(トレーニング) = 0.46
                : 810. 正答率(テスト) = 0.5812
Generation: 820. 正答率(トレーニング) = 0.6
                : 820. 正答率(テスト) = 0.5837
Generation: 830. 正答率(トレーニング) = 0.66
                : 830. 正答率(テスト) = 0.6394
Generation: 840. 正答率(トレーニング) = 0.67
                : 840. 正答率(テスト) = 0.634
Generation: 850. 正答率(トレーニング) = 0.62
                : 850. 正答率(テスト) = 0.622
Generation: 860. 正答率(トレーニング) = 0.68
                : 860. 正答率(テスト) = 0.6186
Generation: 870. 正答率(トレーニング) = 0.59
                : 870. 正答率(テスト) = 0.6682
Generation: 880. 正答率(トレーニング) = 0.67
                : 880. 正答率(テスト) = 0.6589
Generation: 890. 正答率(トレーニング) = 0.71
                : 890. 正答率(テスト) = 0.6812
Generation: 900. 正答率(トレーニング) = 0.64
                : 900. 正答率(テスト) = 0.6588
Generation: 910. 正答率(トレーニング) = 0.67
                : 910. 正答率(テスト) = 0.6664
Generation: 920. 正答率(トレーニング) = 0.72
                : 920. 正答率(テスト) = 0.689
Generation: 930. 正答率(トレーニング) = 0.73
                : 930. 正答率(テスト) = 0.6961
Generation: 940. 正答率(トレーニング) = 0.69
                : 940. 正答率(テスト) = 0.6935
Generation: 950. 正答率(トレーニング) = 0.83
                : 950. 正答率(テスト) = 0.7532
Generation: 960. 正答率(トレーニング) = 0.74
                : 960. 正答率(テスト) = 0.7122
Generation: 970. 正答率(トレーニング) = 0.81
                : 970. 正答率(テスト) = 0.7388
Generation: 980. 正答率(トレーニング) = 0.8
                : 980. 正答率(テスト) = 0.7805
Generation: 990. 正答率(トレーニング) = 0.79
                : 990. 正答率(テスト) = 0.7867
Generation: 1000. 正答率(トレーニング) = 0.82
                : 1000. 正答率(テスト) = 0.7936
Generation: 1010. 正答率(トレーニング) = 0.76
                : 1010. 正答率(テスト) = 0.7865
Generation: 1020. 正答率(トレーニング) = 0.8
                : 1020. 正答率(テスト) = 0.8055
Generation: 1030. 正答率(トレーニング) = 0.73
                : 1030. 正答率(テスト) = 0.813
Generation: 1040. 正答率(トレーニング) = 0.71
                : 1040. 正答率(テスト) = 0.7628
Generation: 1050. 正答率(トレーニング) = 0.78
                : 1050. 正答率(テスト) = 0.8087
Generation: 1060. 正答率(トレーニング) = 0.78
                : 1060. 正答率(テスト) = 0.8109
Generation: 1070. 正答率(トレーニング) = 0.81
                : 1070. 正答率(テスト) = 0.8261
Generation: 1080. 正答率(トレーニング) = 0.85
                : 1080. 正答率(テスト) = 0.8205
Generation: 1090. 正答率(トレーニング) = 0.86
                : 1090. 正答率(テスト) = 0.829
Generation: 1100. 正答率(トレーニング) = 0.84
                : 1100. 正答率(テスト) = 0.822
Generation: 1110. 正答率(トレーニング) = 0.83
                : 1110. 正答率(テスト) = 0.8128
Generation: 1120. 正答率(トレーニング) = 0.88
                : 1120. 正答率(テスト) = 0.8362
Generation: 1130. 正答率(トレーニング) = 0.84
                : 1130. 正答率(テスト) = 0.8381
Generation: 1140. 正答率(トレーニング) = 0.88
                : 1140. 正答率(テスト) = 0.8361
Generation: 1150. 正答率(トレーニング) = 0.76
                : 1150. 正答率(テスト) = 0.8335
Generation: 1160. 正答率(トレーニング) = 0.89
                : 1160. 正答率(テスト) = 0.8405
Generation: 1170. 正答率(トレーニング) = 0.79
                : 1170. 正答率(テスト) = 0.8355
Generation: 1180. 正答率(トレーニング) = 0.88
                : 1180. 正答率(テスト) = 0.845
Generation: 1190. 正答率(トレーニング) = 0.74
                : 1190. 正答率(テスト) = 0.8321
Generation: 1200. 正答率(トレーニング) = 0.88
                : 1200. 正答率(テスト) = 0.8394
Generation: 1210. 正答率(トレーニング) = 0.9
                : 1210. 正答率(テスト) = 0.8464
Generation: 1220. 正答率(トレーニング) = 0.85
                : 1220. 正答率(テスト) = 0.8486
Generation: 1230. 正答率(トレーニング) = 0.83
                : 1230. 正答率(テスト) = 0.8502
Generation: 1240. 正答率(トレーニング) = 0.83
                : 1240. 正答率(テスト) = 0.8488
Generation: 1250. 正答率(トレーニング) = 0.85
                : 1250. 正答率(テスト) = 0.8486
Generation: 1260. 正答率(トレーニング) = 0.88
                : 1260. 正答率(テスト) = 0.853
Generation: 1270. 正答率(トレーニング) = 0.86
                : 1270. 正答率(テスト) = 0.8578
Generation: 1280. 正答率(トレーニング) = 0.86
                : 1280. 正答率(テスト) = 0.8493
Generation: 1290. 正答率(トレーニング) = 0.79
                : 1290. 正答率(テスト) = 0.862
Generation: 1300. 正答率(トレーニング) = 0.85
                : 1300. 正答率(テスト) = 0.8656
Generation: 1310. 正答率(トレーニング) = 0.9
                : 1310. 正答率(テスト) = 0.8693
Generation: 1320. 正答率(トレーニング) = 0.85
                : 1320. 正答率(テスト) = 0.8559
Generation: 1330. 正答率(トレーニング) = 0.86
                : 1330. 正答率(テスト) = 0.8657
Generation: 1340. 正答率(トレーニング) = 0.86
                : 1340. 正答率(テスト) = 0.867
Generation: 1350. 正答率(トレーニング) = 0.84
                : 1350. 正答率(テスト) = 0.8461
Generation: 1360. 正答率(トレーニング) = 0.89
                : 1360. 正答率(テスト) = 0.8665
Generation: 1370. 正答率(トレーニング) = 0.91
                : 1370. 正答率(テスト) = 0.8692
Generation: 1380. 正答率(トレーニング) = 0.87
                : 1380. 正答率(テスト) = 0.8761
Generation: 1390. 正答率(トレーニング) = 0.93
                : 1390. 正答率(テスト) = 0.8633
Generation: 1400. 正答率(トレーニング) = 0.84
                : 1400. 正答率(テスト) = 0.8735
Generation: 1410. 正答率(トレーニング) = 0.89
                : 1410. 正答率(テスト) = 0.8765
Generation: 1420. 正答率(トレーニング) = 0.86
                : 1420. 正答率(テスト) = 0.8742
Generation: 1430. 正答率(トレーニング) = 0.91
                : 1430. 正答率(テスト) = 0.8737
Generation: 1440. 正答率(トレーニング) = 0.87
                : 1440. 正答率(テスト) = 0.8725
Generation: 1450. 正答率(トレーニング) = 0.88
                : 1450. 正答率(テスト) = 0.8797
Generation: 1460. 正答率(トレーニング) = 0.84
                : 1460. 正答率(テスト) = 0.8736
Generation: 1470. 正答率(トレーニング) = 0.85
                : 1470. 正答率(テスト) = 0.88
Generation: 1480. 正答率(トレーニング) = 0.84
                : 1480. 正答率(テスト) = 0.8872
Generation: 1490. 正答率(トレーニング) = 0.9
                : 1490. 正答率(テスト) = 0.8827
Generation: 1500. 正答率(トレーニング) = 0.89
                : 1500. 正答率(テスト) = 0.8802
Generation: 1510. 正答率(トレーニング) = 0.87
                : 1510. 正答率(テスト) = 0.8708
Generation: 1520. 正答率(トレーニング) = 0.83
                : 1520. 正答率(テスト) = 0.8802
Generation: 1530. 正答率(トレーニング) = 0.88
                : 1530. 正答率(テスト) = 0.8787
Generation: 1540. 正答率(トレーニング) = 0.88
                : 1540. 正答率(テスト) = 0.8829
Generation: 1550. 正答率(トレーニング) = 0.93
                : 1550. 正答率(テスト) = 0.8849
Generation: 1560. 正答率(トレーニング) = 0.77
                : 1560. 正答率(テスト) = 0.8862
Generation: 1570. 正答率(トレーニング) = 0.87
                : 1570. 正答率(テスト) = 0.8871
Generation: 1580. 正答率(トレーニング) = 0.89
                : 1580. 正答率(テスト) = 0.8799
Generation: 1590. 正答率(トレーニング) = 0.89
                : 1590. 正答率(テスト) = 0.8884
Generation: 1600. 正答率(トレーニング) = 0.82
                : 1600. 正答率(テスト) = 0.8939
Generation: 1610. 正答率(トレーニング) = 0.83
                : 1610. 正答率(テスト) = 0.8845
Generation: 1620. 正答率(トレーニング) = 0.92
                : 1620. 正答率(テスト) = 0.8983
Generation: 1630. 正答率(トレーニング) = 0.89
                : 1630. 正答率(テスト) = 0.8924
Generation: 1640. 正答率(トレーニング) = 0.89
                : 1640. 正答率(テスト) = 0.8914
Generation: 1650. 正答率(トレーニング) = 0.92
                : 1650. 正答率(テスト) = 0.886
Generation: 1660. 正答率(トレーニング) = 0.9
                : 1660. 正答率(テスト) = 0.8975
Generation: 1670. 正答率(トレーニング) = 0.86
                : 1670. 正答率(テスト) = 0.8977
Generation: 1680. 正答率(トレーニング) = 0.9
                : 1680. 正答率(テスト) = 0.8954
Generation: 1690. 正答率(トレーニング) = 0.88
                : 1690. 正答率(テスト) = 0.8968
Generation: 1700. 正答率(トレーニング) = 0.89
                : 1700. 正答率(テスト) = 0.9008
Generation: 1710. 正答率(トレーニング) = 0.87
                : 1710. 正答率(テスト) = 0.8958
Generation: 1720. 正答率(トレーニング) = 0.87
                : 1720. 正答率(テスト) = 0.9024
Generation: 1730. 正答率(トレーニング) = 0.89
                : 1730. 正答率(テスト) = 0.8998
Generation: 1740. 正答率(トレーニング) = 0.94
                : 1740. 正答率(テスト) = 0.9057
Generation: 1750. 正答率(トレーニング) = 0.89
                : 1750. 正答率(テスト) = 0.8945
Generation: 1760. 正答率(トレーニング) = 0.92
                : 1760. 正答率(テスト) = 0.9053
Generation: 1770. 正答率(トレーニング) = 0.93
                : 1770. 正答率(テスト) = 0.9092
Generation: 1780. 正答率(トレーニング) = 0.9
                : 1780. 正答率(テスト) = 0.9056
Generation: 1790. 正答率(トレーニング) = 0.91
                : 1790. 正答率(テスト) = 0.9043
Generation: 1800. 正答率(トレーニング) = 0.93
                : 1800. 正答率(テスト) = 0.9088
Generation: 1810. 正答率(トレーニング) = 0.86
                : 1810. 正答率(テスト) = 0.9023
Generation: 1820. 正答率(トレーニング) = 0.98
                : 1820. 正答率(テスト) = 0.9086
Generation: 1830. 正答率(トレーニング) = 0.89
                : 1830. 正答率(テスト) = 0.9057
Generation: 1840. 正答率(トレーニング) = 0.93
                : 1840. 正答率(テスト) = 0.9103
Generation: 1850. 正答率(トレーニング) = 0.82
                : 1850. 正答率(テスト) = 0.9065
Generation: 1860. 正答率(トレーニング) = 0.92
                : 1860. 正答率(テスト) = 0.9134
Generation: 1870. 正答率(トレーニング) = 0.94
                : 1870. 正答率(テスト) = 0.9023
Generation: 1880. 正答率(トレーニング) = 0.95
                : 1880. 正答率(テスト) = 0.9138
Generation: 1890. 正答率(トレーニング) = 0.88
                : 1890. 正答率(テスト) = 0.9064
Generation: 1900. 正答率(トレーニング) = 0.92
                : 1900. 正答率(テスト) = 0.9073
Generation: 1910. 正答率(トレーニング) = 0.9
                : 1910. 正答率(テスト) = 0.9144
Generation: 1920. 正答率(トレーニング) = 0.92
                : 1920. 正答率(テスト) = 0.8995
Generation: 1930. 正答率(トレーニング) = 0.89
                : 1930. 正答率(テスト) = 0.9095
Generation: 1940. 正答率(トレーニング) = 0.91
                : 1940. 正答率(テスト) = 0.9127
Generation: 1950. 正答率(トレーニング) = 0.89
                : 1950. 正答率(テスト) = 0.9125
Generation: 1960. 正答率(トレーニング) = 0.9
                : 1960. 正答率(テスト) = 0.9162
Generation: 1970. 正答率(トレーニング) = 0.89
                : 1970. 正答率(テスト) = 0.9144
Generation: 1980. 正答率(トレーニング) = 0.92
                : 1980. 正答率(テスト) = 0.9111
Generation: 1990. 正答率(トレーニング) = 0.91
                : 1990. 正答率(テスト) = 0.9128
Generation: 2000. 正答率(トレーニング) = 0.94
                : 2000. 正答率(テスト) = 0.9115

sigmoid - Xavier

In [6]:
import numpy as np
from data.mnist import load_mnist
from PIL import Image
import pickle
from common import functions
import matplotlib.pyplot as plt

# mnistをロード
(x_train, d_train), (x_test, d_test) = load_mnist(normalize=True, one_hot_label=True)
train_size = len(x_train)

print("データ読み込み完了")

#入力層サイズ
input_layer_size = 784
#中間層サイズ
hidden_layer_1_size = 40
hidden_layer_2_size = 20
#出力層サイズ
output_layer_size = 10
# 繰り返し数
iters_num = 2000
# ミニバッチサイズ
batch_size = 100
# 学習率
learning_rate = 0.1
# 描写頻度
plot_interval=10

# 初期設定
def init_network():
    network = {} 
    
    ###########  変更箇所  ##############
    
    # Xavierの初期値
    network['W1'] = np.random.randn(input_layer_size, hidden_layer_1_size) / (np.sqrt(input_layer_size))
    network['W2'] = np.random.randn(hidden_layer_1_size, hidden_layer_2_size) / (np.sqrt(hidden_layer_1_size))
    network['W3'] = np.random.randn(hidden_layer_2_size, output_layer_size) / (np.sqrt(hidden_layer_2_size))
    
    #################################
    
    network['b1'] = np.zeros(hidden_layer_1_size)
    network['b2'] = np.zeros(hidden_layer_2_size)
    network['b3'] = np.zeros(output_layer_size)

    return network

# 順伝播
def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    hidden_f = functions.sigmoid
    
    u1 =  np.dot(x, W1) + b1
    z1 = hidden_f(u1)
    u2 =  np.dot(z1, W2) + b2
    z2 = hidden_f(u2)
    u3 =  np.dot(z2, W3) + b3
    y = functions.softmax(u3)
 
    return z1, z2, y

# 誤差逆伝播
def backward(x, d, z1, z2, y):
    grad = {}
    
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    hidden_d_f = functions.d_sigmoid
    
    # 出力層でのデルタ
    delta3 = functions.d_softmax_with_loss(d, y)
    # b3の勾配
    grad['b3'] = np.sum(delta3, axis=0)
    # W3の勾配
    grad['W3'] = np.dot(z2.T, delta3)
    # 2層でのデルタ
    delta2 = np.dot(delta3, W3.T) * hidden_d_f(z2)
    # b2の勾配
    grad['b2'] = np.sum(delta2, axis=0)
    # W2の勾配
    grad['W2'] = np.dot(z1.T, delta2)
    # 1層でのデルタ
    delta1 = np.dot(delta2, W2.T) * hidden_d_f(z1)
    # b1の勾配
    grad['b1'] = np.sum(delta1, axis=0)
    # W1の勾配
    grad['W1'] = np.dot(x.T, delta1)

    return grad

# パラメータの初期化
network = init_network()

accuracies_train = []
accuracies_test = []

# 正答率
def accuracy(x, d):
    z1, z2, y = forward(network, x)
    y = np.argmax(y, axis=1)
    if d.ndim != 1 : d = np.argmax(d, axis=1)
    accuracy = np.sum(y == d) / float(x.shape[0])
    return accuracy

for i in range(iters_num):
    # ランダムにバッチを取得    
    batch_mask = np.random.choice(train_size, batch_size)
    # ミニバッチに対応する教師訓練画像データを取得    
    x_batch = x_train[batch_mask]
    # ミニバッチに対応する訓練正解ラベルデータを取得する
    d_batch = d_train[batch_mask]


    
    z1, z2, y = forward(network, x_batch)
    grad = backward(x_batch, d_batch, z1, z2, y)

    if (i+1)%plot_interval==0:
        accr_test = accuracy(x_test, d_test)
        accuracies_test.append(accr_test)
        
        accr_train = accuracy(x_batch, d_batch)
        accuracies_train.append(accr_train)

        print('Generation: ' + str(i+1) + '. 正答率(トレーニング) = ' + str(accr_train))
        print('                : ' + str(i+1) + '. 正答率(テスト) = ' + str(accr_test))
        
    # パラメータに勾配適用
    for key in ('W1', 'W2', 'W3', 'b1', 'b2', 'b3'):
        network[key]  -= learning_rate * grad[key]


lists = range(0, iters_num, plot_interval)
plt.plot(lists, accuracies_train, label="training set")
plt.plot(lists, accuracies_test,  label="test set")
plt.legend(loc="lower right")
plt.title("accuracy")
plt.xlabel("count")
plt.ylabel("accuracy")
plt.ylim(0, 1.0)
# グラフの表示
plt.show()
データ読み込み完了
Generation: 10. 正答率(トレーニング) = 0.06
                : 10. 正答率(テスト) = 0.0958
Generation: 20. 正答率(トレーニング) = 0.1
                : 20. 正答率(テスト) = 0.1049
Generation: 30. 正答率(トレーニング) = 0.1
                : 30. 正答率(テスト) = 0.1145
Generation: 40. 正答率(トレーニング) = 0.13
                : 40. 正答率(テスト) = 0.1026
Generation: 50. 正答率(トレーニング) = 0.2
                : 50. 正答率(テスト) = 0.1738
Generation: 60. 正答率(トレーニング) = 0.13
                : 60. 正答率(テスト) = 0.1879
Generation: 70. 正答率(トレーニング) = 0.34
                : 70. 正答率(テスト) = 0.3401
Generation: 80. 正答率(トレーニング) = 0.24
                : 80. 正答率(テスト) = 0.2623
Generation: 90. 正答率(トレーニング) = 0.27
                : 90. 正答率(テスト) = 0.243
Generation: 100. 正答率(トレーニング) = 0.2
                : 100. 正答率(テスト) = 0.2175
Generation: 110. 正答率(トレーニング) = 0.24
                : 110. 正答率(テスト) = 0.2126
Generation: 120. 正答率(トレーニング) = 0.44
                : 120. 正答率(テスト) = 0.4318
Generation: 130. 正答率(トレーニング) = 0.34
                : 130. 正答率(テスト) = 0.3931
Generation: 140. 正答率(トレーニング) = 0.39
                : 140. 正答率(テスト) = 0.4146
Generation: 150. 正答率(トレーニング) = 0.33
                : 150. 正答率(テスト) = 0.4154
Generation: 160. 正答率(トレーニング) = 0.4
                : 160. 正答率(テスト) = 0.4297
Generation: 170. 正答率(トレーニング) = 0.39
                : 170. 正答率(テスト) = 0.4284
Generation: 180. 正答率(トレーニング) = 0.4
                : 180. 正答率(テスト) = 0.3467
Generation: 190. 正答率(トレーニング) = 0.34
                : 190. 正答率(テスト) = 0.3449
Generation: 200. 正答率(トレーニング) = 0.42
                : 200. 正答率(テスト) = 0.4103
Generation: 210. 正答率(トレーニング) = 0.36
                : 210. 正答率(テスト) = 0.3585
Generation: 220. 正答率(トレーニング) = 0.27
                : 220. 正答率(テスト) = 0.3069
Generation: 230. 正答率(トレーニング) = 0.28
                : 230. 正答率(テスト) = 0.3484
Generation: 240. 正答率(トレーニング) = 0.29
                : 240. 正答率(テスト) = 0.2927
Generation: 250. 正答率(トレーニング) = 0.31
                : 250. 正答率(テスト) = 0.3593
Generation: 260. 正答率(トレーニング) = 0.31
                : 260. 正答率(テスト) = 0.3331
Generation: 270. 正答率(トレーニング) = 0.45
                : 270. 正答率(テスト) = 0.4201
Generation: 280. 正答率(トレーニング) = 0.36
                : 280. 正答率(テスト) = 0.4004
Generation: 290. 正答率(トレーニング) = 0.33
                : 290. 正答率(テスト) = 0.3749
Generation: 300. 正答率(トレーニング) = 0.38
                : 300. 正答率(テスト) = 0.392
Generation: 310. 正答率(トレーニング) = 0.35
                : 310. 正答率(テスト) = 0.459
Generation: 320. 正答率(トレーニング) = 0.4
                : 320. 正答率(テスト) = 0.4217
Generation: 330. 正答率(トレーニング) = 0.46
                : 330. 正答率(テスト) = 0.4758
Generation: 340. 正答率(トレーニング) = 0.51
                : 340. 正答率(テスト) = 0.4958
Generation: 350. 正答率(トレーニング) = 0.56
                : 350. 正答率(テスト) = 0.4795
Generation: 360. 正答率(トレーニング) = 0.49
                : 360. 正答率(テスト) = 0.471
Generation: 370. 正答率(トレーニング) = 0.4
                : 370. 正答率(テスト) = 0.4556
Generation: 380. 正答率(トレーニング) = 0.47
                : 380. 正答率(テスト) = 0.4475
Generation: 390. 正答率(トレーニング) = 0.48
                : 390. 正答率(テスト) = 0.4449
Generation: 400. 正答率(トレーニング) = 0.41
                : 400. 正答率(テスト) = 0.4521
Generation: 410. 正答率(トレーニング) = 0.52
                : 410. 正答率(テスト) = 0.4753
Generation: 420. 正答率(トレーニング) = 0.57
                : 420. 正答率(テスト) = 0.4861
Generation: 430. 正答率(トレーニング) = 0.39
                : 430. 正答率(テスト) = 0.4688
Generation: 440. 正答率(トレーニング) = 0.51
                : 440. 正答率(テスト) = 0.4986
Generation: 450. 正答率(トレーニング) = 0.5
                : 450. 正答率(テスト) = 0.5093
Generation: 460. 正答率(トレーニング) = 0.61
                : 460. 正答率(テスト) = 0.5093
Generation: 470. 正答率(トレーニング) = 0.56
                : 470. 正答率(テスト) = 0.5111
Generation: 480. 正答率(トレーニング) = 0.59
                : 480. 正答率(テスト) = 0.5139
Generation: 490. 正答率(トレーニング) = 0.56
                : 490. 正答率(テスト) = 0.5265
Generation: 500. 正答率(トレーニング) = 0.46
                : 500. 正答率(テスト) = 0.535
Generation: 510. 正答率(トレーニング) = 0.56
                : 510. 正答率(テスト) = 0.5424
Generation: 520. 正答率(トレーニング) = 0.59
                : 520. 正答率(テスト) = 0.5219
Generation: 530. 正答率(トレーニング) = 0.56
                : 530. 正答率(テスト) = 0.517
Generation: 540. 正答率(トレーニング) = 0.51
                : 540. 正答率(テスト) = 0.5212
Generation: 550. 正答率(トレーニング) = 0.58
                : 550. 正答率(テスト) = 0.5533
Generation: 560. 正答率(トレーニング) = 0.61
                : 560. 正答率(テスト) = 0.5511
Generation: 570. 正答率(トレーニング) = 0.55
                : 570. 正答率(テスト) = 0.5496
Generation: 580. 正答率(トレーニング) = 0.59
                : 580. 正答率(テスト) = 0.5592
Generation: 590. 正答率(トレーニング) = 0.49
                : 590. 正答率(テスト) = 0.566
Generation: 600. 正答率(トレーニング) = 0.57
                : 600. 正答率(テスト) = 0.5762
Generation: 610. 正答率(トレーニング) = 0.62
                : 610. 正答率(テスト) = 0.5724
Generation: 620. 正答率(トレーニング) = 0.53
                : 620. 正答率(テスト) = 0.5737
Generation: 630. 正答率(トレーニング) = 0.52
                : 630. 正答率(テスト) = 0.5768
Generation: 640. 正答率(トレーニング) = 0.57
                : 640. 正答率(テスト) = 0.5786
Generation: 650. 正答率(トレーニング) = 0.62
                : 650. 正答率(テスト) = 0.5936
Generation: 660. 正答率(トレーニング) = 0.64
                : 660. 正答率(テスト) = 0.6017
Generation: 670. 正答率(トレーニング) = 0.59
                : 670. 正答率(テスト) = 0.6038
Generation: 680. 正答率(トレーニング) = 0.57
                : 680. 正答率(テスト) = 0.5944
Generation: 690. 正答率(トレーニング) = 0.56
                : 690. 正答率(テスト) = 0.598
Generation: 700. 正答率(トレーニング) = 0.58
                : 700. 正答率(テスト) = 0.6106
Generation: 710. 正答率(トレーニング) = 0.61
                : 710. 正答率(テスト) = 0.6082
Generation: 720. 正答率(トレーニング) = 0.54
                : 720. 正答率(テスト) = 0.606
Generation: 730. 正答率(トレーニング) = 0.64
                : 730. 正答率(テスト) = 0.6252
Generation: 740. 正答率(トレーニング) = 0.58
                : 740. 正答率(テスト) = 0.6174
Generation: 750. 正答率(トレーニング) = 0.68
                : 750. 正答率(テスト) = 0.6167
Generation: 760. 正答率(トレーニング) = 0.59
                : 760. 正答率(テスト) = 0.6157
Generation: 770. 正答率(トレーニング) = 0.7
                : 770. 正答率(テスト) = 0.6332
Generation: 780. 正答率(トレーニング) = 0.58
                : 780. 正答率(テスト) = 0.6359
Generation: 790. 正答率(トレーニング) = 0.63
                : 790. 正答率(テスト) = 0.6393
Generation: 800. 正答率(トレーニング) = 0.65
                : 800. 正答率(テスト) = 0.6403
Generation: 810. 正答率(トレーニング) = 0.61
                : 810. 正答率(テスト) = 0.6421
Generation: 820. 正答率(トレーニング) = 0.61
                : 820. 正答率(テスト) = 0.6364
Generation: 830. 正答率(トレーニング) = 0.69
                : 830. 正答率(テスト) = 0.6465
Generation: 840. 正答率(トレーニング) = 0.69
                : 840. 正答率(テスト) = 0.6538
Generation: 850. 正答率(トレーニング) = 0.71
                : 850. 正答率(テスト) = 0.6599
Generation: 860. 正答率(トレーニング) = 0.66
                : 860. 正答率(テスト) = 0.6618
Generation: 870. 正答率(トレーニング) = 0.7
                : 870. 正答率(テスト) = 0.6687
Generation: 880. 正答率(トレーニング) = 0.72
                : 880. 正答率(テスト) = 0.6641
Generation: 890. 正答率(トレーニング) = 0.63
                : 890. 正答率(テスト) = 0.6673
Generation: 900. 正答率(トレーニング) = 0.6
                : 900. 正答率(テスト) = 0.6791
Generation: 910. 正答率(トレーニング) = 0.67
                : 910. 正答率(テスト) = 0.6784
Generation: 920. 正答率(トレーニング) = 0.66
                : 920. 正答率(テスト) = 0.675
Generation: 930. 正答率(トレーニング) = 0.69
                : 930. 正答率(テスト) = 0.6706
Generation: 940. 正答率(トレーニング) = 0.7
                : 940. 正答率(テスト) = 0.6757
Generation: 950. 正答率(トレーニング) = 0.69
                : 950. 正答率(テスト) = 0.6815
Generation: 960. 正答率(トレーニング) = 0.6
                : 960. 正答率(テスト) = 0.6817
Generation: 970. 正答率(トレーニング) = 0.66
                : 970. 正答率(テスト) = 0.6754
Generation: 980. 正答率(トレーニング) = 0.61
                : 980. 正答率(テスト) = 0.6711
Generation: 990. 正答率(トレーニング) = 0.62
                : 990. 正答率(テスト) = 0.6757
Generation: 1000. 正答率(トレーニング) = 0.72
                : 1000. 正答率(テスト) = 0.6827
Generation: 1010. 正答率(トレーニング) = 0.69
                : 1010. 正答率(テスト) = 0.6807
Generation: 1020. 正答率(トレーニング) = 0.66
                : 1020. 正答率(テスト) = 0.6817
Generation: 1030. 正答率(トレーニング) = 0.7
                : 1030. 正答率(テスト) = 0.6895
Generation: 1040. 正答率(トレーニング) = 0.57
                : 1040. 正答率(テスト) = 0.6915
Generation: 1050. 正答率(トレーニング) = 0.72
                : 1050. 正答率(テスト) = 0.6988
Generation: 1060. 正答率(トレーニング) = 0.66
                : 1060. 正答率(テスト) = 0.6945
Generation: 1070. 正答率(トレーニング) = 0.75
                : 1070. 正答率(テスト) = 0.6949
Generation: 1080. 正答率(トレーニング) = 0.75
                : 1080. 正答率(テスト) = 0.6886
Generation: 1090. 正答率(トレーニング) = 0.71
                : 1090. 正答率(テスト) = 0.6866
Generation: 1100. 正答率(トレーニング) = 0.67
                : 1100. 正答率(テスト) = 0.7001
Generation: 1110. 正答率(トレーニング) = 0.71
                : 1110. 正答率(テスト) = 0.6952
Generation: 1120. 正答率(トレーニング) = 0.59
                : 1120. 正答率(テスト) = 0.6963
Generation: 1130. 正答率(トレーニング) = 0.69
                : 1130. 正答率(テスト) = 0.7116
Generation: 1140. 正答率(トレーニング) = 0.73
                : 1140. 正答率(テスト) = 0.7124
Generation: 1150. 正答率(トレーニング) = 0.68
                : 1150. 正答率(テスト) = 0.7113
Generation: 1160. 正答率(トレーニング) = 0.72
                : 1160. 正答率(テスト) = 0.7067
Generation: 1170. 正答率(トレーニング) = 0.73
                : 1170. 正答率(テスト) = 0.7124
Generation: 1180. 正答率(トレーニング) = 0.68
                : 1180. 正答率(テスト) = 0.703
Generation: 1190. 正答率(トレーニング) = 0.67
                : 1190. 正答率(テスト) = 0.7091
Generation: 1200. 正答率(トレーニング) = 0.82
                : 1200. 正答率(テスト) = 0.7075
Generation: 1210. 正答率(トレーニング) = 0.67
                : 1210. 正答率(テスト) = 0.7181
Generation: 1220. 正答率(トレーニング) = 0.79
                : 1220. 正答率(テスト) = 0.7145
Generation: 1230. 正答率(トレーニング) = 0.71
                : 1230. 正答率(テスト) = 0.7205
Generation: 1240. 正答率(トレーニング) = 0.71
                : 1240. 正答率(テスト) = 0.7264
Generation: 1250. 正答率(トレーニング) = 0.8
                : 1250. 正答率(テスト) = 0.7255
Generation: 1260. 正答率(トレーニング) = 0.77
                : 1260. 正答率(テスト) = 0.721
Generation: 1270. 正答率(トレーニング) = 0.71
                : 1270. 正答率(テスト) = 0.7333
Generation: 1280. 正答率(トレーニング) = 0.74
                : 1280. 正答率(テスト) = 0.7291
Generation: 1290. 正答率(トレーニング) = 0.65
                : 1290. 正答率(テスト) = 0.7312
Generation: 1300. 正答率(トレーニング) = 0.73
                : 1300. 正答率(テスト) = 0.7357
Generation: 1310. 正答率(トレーニング) = 0.83
                : 1310. 正答率(テスト) = 0.7414
Generation: 1320. 正答率(トレーニング) = 0.69
                : 1320. 正答率(テスト) = 0.7437
Generation: 1330. 正答率(トレーニング) = 0.7
                : 1330. 正答率(テスト) = 0.7436
Generation: 1340. 正答率(トレーニング) = 0.82
                : 1340. 正答率(テスト) = 0.7402
Generation: 1350. 正答率(トレーニング) = 0.71
                : 1350. 正答率(テスト) = 0.742
Generation: 1360. 正答率(トレーニング) = 0.74
                : 1360. 正答率(テスト) = 0.7391
Generation: 1370. 正答率(トレーニング) = 0.68
                : 1370. 正答率(テスト) = 0.7406
Generation: 1380. 正答率(トレーニング) = 0.76
                : 1380. 正答率(テスト) = 0.7417
Generation: 1390. 正答率(トレーニング) = 0.71
                : 1390. 正答率(テスト) = 0.7485
Generation: 1400. 正答率(トレーニング) = 0.73
                : 1400. 正答率(テスト) = 0.7484
Generation: 1410. 正答率(トレーニング) = 0.78
                : 1410. 正答率(テスト) = 0.7536
Generation: 1420. 正答率(トレーニング) = 0.74
                : 1420. 正答率(テスト) = 0.7526
Generation: 1430. 正答率(トレーニング) = 0.68
                : 1430. 正答率(テスト) = 0.7542
Generation: 1440. 正答率(トレーニング) = 0.84
                : 1440. 正答率(テスト) = 0.7522
Generation: 1450. 正答率(トレーニング) = 0.75
                : 1450. 正答率(テスト) = 0.7528
Generation: 1460. 正答率(トレーニング) = 0.8
                : 1460. 正答率(テスト) = 0.7582
Generation: 1470. 正答率(トレーニング) = 0.73
                : 1470. 正答率(テスト) = 0.7585
Generation: 1480. 正答率(トレーニング) = 0.77
                : 1480. 正答率(テスト) = 0.7541
Generation: 1490. 正答率(トレーニング) = 0.79
                : 1490. 正答率(テスト) = 0.7597
Generation: 1500. 正答率(トレーニング) = 0.74
                : 1500. 正答率(テスト) = 0.7663
Generation: 1510. 正答率(トレーニング) = 0.75
                : 1510. 正答率(テスト) = 0.7614
Generation: 1520. 正答率(トレーニング) = 0.75
                : 1520. 正答率(テスト) = 0.7607
Generation: 1530. 正答率(トレーニング) = 0.76
                : 1530. 正答率(テスト) = 0.7696
Generation: 1540. 正答率(トレーニング) = 0.76
                : 1540. 正答率(テスト) = 0.7672
Generation: 1550. 正答率(トレーニング) = 0.77
                : 1550. 正答率(テスト) = 0.766
Generation: 1560. 正答率(トレーニング) = 0.8
                : 1560. 正答率(テスト) = 0.7715
Generation: 1570. 正答率(トレーニング) = 0.66
                : 1570. 正答率(テスト) = 0.7658
Generation: 1580. 正答率(トレーニング) = 0.78
                : 1580. 正答率(テスト) = 0.7745
Generation: 1590. 正答率(トレーニング) = 0.69
                : 1590. 正答率(テスト) = 0.7748
Generation: 1600. 正答率(トレーニング) = 0.78
                : 1600. 正答率(テスト) = 0.7724
Generation: 1610. 正答率(トレーニング) = 0.7
                : 1610. 正答率(テスト) = 0.7763
Generation: 1620. 正答率(トレーニング) = 0.81
                : 1620. 正答率(テスト) = 0.7802
Generation: 1630. 正答率(トレーニング) = 0.7
                : 1630. 正答率(テスト) = 0.7842
Generation: 1640. 正答率(トレーニング) = 0.79
                : 1640. 正答率(テスト) = 0.7817
Generation: 1650. 正答率(トレーニング) = 0.75
                : 1650. 正答率(テスト) = 0.7874
Generation: 1660. 正答率(トレーニング) = 0.84
                : 1660. 正答率(テスト) = 0.7858
Generation: 1670. 正答率(トレーニング) = 0.77
                : 1670. 正答率(テスト) = 0.7868
Generation: 1680. 正答率(トレーニング) = 0.78
                : 1680. 正答率(テスト) = 0.7835
Generation: 1690. 正答率(トレーニング) = 0.79
                : 1690. 正答率(テスト) = 0.7855
Generation: 1700. 正答率(トレーニング) = 0.82
                : 1700. 正答率(テスト) = 0.7869
Generation: 1710. 正答率(トレーニング) = 0.72
                : 1710. 正答率(テスト) = 0.7873
Generation: 1720. 正答率(トレーニング) = 0.75
                : 1720. 正答率(テスト) = 0.7898
Generation: 1730. 正答率(トレーニング) = 0.78
                : 1730. 正答率(テスト) = 0.7918
Generation: 1740. 正答率(トレーニング) = 0.82
                : 1740. 正答率(テスト) = 0.7895
Generation: 1750. 正答率(トレーニング) = 0.83
                : 1750. 正答率(テスト) = 0.793
Generation: 1760. 正答率(トレーニング) = 0.8
                : 1760. 正答率(テスト) = 0.7946
Generation: 1770. 正答率(トレーニング) = 0.82
                : 1770. 正答率(テスト) = 0.7917
Generation: 1780. 正答率(トレーニング) = 0.8
                : 1780. 正答率(テスト) = 0.7941
Generation: 1790. 正答率(トレーニング) = 0.73
                : 1790. 正答率(テスト) = 0.7944
Generation: 1800. 正答率(トレーニング) = 0.8
                : 1800. 正答率(テスト) = 0.7974
Generation: 1810. 正答率(トレーニング) = 0.77
                : 1810. 正答率(テスト) = 0.7983
Generation: 1820. 正答率(トレーニング) = 0.75
                : 1820. 正答率(テスト) = 0.7972
Generation: 1830. 正答率(トレーニング) = 0.81
                : 1830. 正答率(テスト) = 0.7999
Generation: 1840. 正答率(トレーニング) = 0.82
                : 1840. 正答率(テスト) = 0.8001
Generation: 1850. 正答率(トレーニング) = 0.85
                : 1850. 正答率(テスト) = 0.7997
Generation: 1860. 正答率(トレーニング) = 0.8
                : 1860. 正答率(テスト) = 0.7964
Generation: 1870. 正答率(トレーニング) = 0.83
                : 1870. 正答率(テスト) = 0.8017
Generation: 1880. 正答率(トレーニング) = 0.78
                : 1880. 正答率(テスト) = 0.8034
Generation: 1890. 正答率(トレーニング) = 0.77
                : 1890. 正答率(テスト) = 0.8042
Generation: 1900. 正答率(トレーニング) = 0.79
                : 1900. 正答率(テスト) = 0.8042
Generation: 1910. 正答率(トレーニング) = 0.84
                : 1910. 正答率(テスト) = 0.8046
Generation: 1920. 正答率(トレーニング) = 0.77
                : 1920. 正答率(テスト) = 0.808
Generation: 1930. 正答率(トレーニング) = 0.77
                : 1930. 正答率(テスト) = 0.8066
Generation: 1940. 正答率(トレーニング) = 0.76
                : 1940. 正答率(テスト) = 0.8076
Generation: 1950. 正答率(トレーニング) = 0.79
                : 1950. 正答率(テスト) = 0.8096
Generation: 1960. 正答率(トレーニング) = 0.82
                : 1960. 正答率(テスト) = 0.8121
Generation: 1970. 正答率(トレーニング) = 0.81
                : 1970. 正答率(テスト) = 0.8127
Generation: 1980. 正答率(トレーニング) = 0.75
                : 1980. 正答率(テスト) = 0.8123
Generation: 1990. 正答率(トレーニング) = 0.83
                : 1990. 正答率(テスト) = 0.814
Generation: 2000. 正答率(トレーニング) = 0.75
                : 2000. 正答率(テスト) = 0.8134

ReLU - He

In [7]:
import numpy as np
from data.mnist import load_mnist
from PIL import Image
import pickle
from common import functions
import matplotlib.pyplot as plt

# mnistをロード
(x_train, d_train), (x_test, d_test) = load_mnist(normalize=True, one_hot_label=True)
train_size = len(x_train)

print("データ読み込み完了")

# 重み初期値補正係数
wieght_init = 0.01
#入力層サイズ
input_layer_size = 784
#中間層サイズ
hidden_layer_1_size = 40
hidden_layer_2_size = 20

#出力層サイズ
output_layer_size = 10
# 繰り返し数
iters_num = 2000
# ミニバッチサイズ
batch_size = 100
# 学習率
learning_rate = 0.1
# 描写頻度
plot_interval=10

# 初期設定
def init_network():
    network = {} 

    ###########  変更箇所  ##############

    # Heの初期値
    network['W1'] = np.random.randn(input_layer_size, hidden_layer_1_size) / np.sqrt(input_layer_size) * np.sqrt(2)
    network['W2'] = np.random.randn(hidden_layer_1_size, hidden_layer_2_size) / np.sqrt(hidden_layer_1_size) * np.sqrt(2)
    network['W3'] = np.random.randn(hidden_layer_2_size, output_layer_size) / np.sqrt(hidden_layer_2_size) * np.sqrt(2)
        
    #################################
    
    network['b1'] = np.zeros(hidden_layer_1_size)
    network['b2'] = np.zeros(hidden_layer_2_size)
    network['b3'] = np.zeros(output_layer_size)

    return network

# 順伝播
def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    ###########  変更箇所  ##############
    
    hidden_f = functions.relu
    
    #################################
    
    u1 =  np.dot(x, W1) + b1
    z1 = hidden_f(u1)
    u2 =  np.dot(z1, W2) + b2
    z2 = hidden_f(u2)
    u3 =  np.dot(z2, W3) + b3
    y = functions.softmax(u3)
 
    return z1, z2, y

# 誤差逆伝播
def backward(x, d, z1, z2, y):
    grad = {}
    
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']
    
    ###########  変更箇所  ##############
    
    hidden_d_f = functions.d_relu
    
    #################################
    
    # 出力層でのデルタ
    delta3 = functions.d_softmax_with_loss(d, y)
    # b3の勾配
    grad['b3'] = np.sum(delta3, axis=0)
    # W3の勾配
    grad['W3'] = np.dot(z2.T, delta3)
    # 2層でのデルタ
    delta2 = np.dot(delta3, W3.T) * hidden_d_f(z2)
    # b2の勾配
    grad['b2'] = np.sum(delta2, axis=0)
    # W2の勾配
    grad['W2'] = np.dot(z1.T, delta2)
    # 1層でのデルタ
    delta1 = np.dot(delta2, W2.T) * hidden_d_f(z1)
    # b1の勾配
    grad['b1'] = np.sum(delta1, axis=0)
    # W1の勾配
    grad['W1'] = np.dot(x.T, delta1)

    return grad

# パラメータの初期化
network = init_network()

accuracies_train = []
accuracies_test = []

# 正答率
def accuracy(x, d):
    z1, z2, y = forward(network, x)
    y = np.argmax(y, axis=1)
    if d.ndim != 1 : d = np.argmax(d, axis=1)
    accuracy = np.sum(y == d) / float(x.shape[0])
    return accuracy

for i in range(iters_num):
    # ランダムにバッチを取得    
    batch_mask = np.random.choice(train_size, batch_size)
    # ミニバッチに対応する教師訓練画像データを取得    
    x_batch = x_train[batch_mask]
    # ミニバッチに対応する訓練正解ラベルデータを取得する
    d_batch = d_train[batch_mask]


    
    z1, z2, y = forward(network, x_batch)
    grad = backward(x_batch, d_batch, z1, z2, y)

    if (i+1)%plot_interval==0:
        accr_test = accuracy(x_test, d_test)
        accuracies_test.append(accr_test)
        
        accr_train = accuracy(x_batch, d_batch)
        accuracies_train.append(accr_train)

        print('Generation: ' + str(i+1) + '. 正答率(トレーニング) = ' + str(accr_train))
        print('                : ' + str(i+1) + '. 正答率(テスト) = ' + str(accr_test))
        
    # パラメータに勾配適用
    for key in ('W1', 'W2', 'W3', 'b1', 'b2', 'b3'):
        network[key]  -= learning_rate * grad[key]


lists = range(0, iters_num, plot_interval)
plt.plot(lists, accuracies_train, label="training set")
plt.plot(lists, accuracies_test,  label="test set")
plt.legend(loc="lower right")
plt.title("accuracy")
plt.xlabel("count")
plt.ylabel("accuracy")
plt.ylim(0, 1.0)
# グラフの表示
plt.show()
データ読み込み完了
Generation: 10. 正答率(トレーニング) = 0.41
                : 10. 正答率(テスト) = 0.4148
Generation: 20. 正答率(トレーニング) = 0.59
                : 20. 正答率(テスト) = 0.5964
Generation: 30. 正答率(トレーニング) = 0.7
                : 30. 正答率(テスト) = 0.6751
Generation: 40. 正答率(トレーニング) = 0.77
                : 40. 正答率(テスト) = 0.7409
Generation: 50. 正答率(トレーニング) = 0.83
                : 50. 正答率(テスト) = 0.8083
Generation: 60. 正答率(トレーニング) = 0.81
                : 60. 正答率(テスト) = 0.7505
Generation: 70. 正答率(トレーニング) = 0.8
                : 70. 正答率(テスト) = 0.8447
Generation: 80. 正答率(トレーニング) = 0.86
                : 80. 正答率(テスト) = 0.8597
Generation: 90. 正答率(トレーニング) = 0.81
                : 90. 正答率(テスト) = 0.8432
Generation: 100. 正答率(トレーニング) = 0.89
                : 100. 正答率(テスト) = 0.8523
Generation: 110. 正答率(トレーニング) = 0.87
                : 110. 正答率(テスト) = 0.876
Generation: 120. 正答率(トレーニング) = 0.91
                : 120. 正答率(テスト) = 0.886
Generation: 130. 正答率(トレーニング) = 0.86
                : 130. 正答率(テスト) = 0.888
Generation: 140. 正答率(トレーニング) = 0.84
                : 140. 正答率(テスト) = 0.8871
Generation: 150. 正答率(トレーニング) = 0.93
                : 150. 正答率(テスト) = 0.8943
Generation: 160. 正答率(トレーニング) = 0.94
                : 160. 正答率(テスト) = 0.8892
Generation: 170. 正答率(トレーニング) = 0.86
                : 170. 正答率(テスト) = 0.8922
Generation: 180. 正答率(トレーニング) = 0.91
                : 180. 正答率(テスト) = 0.8949
Generation: 190. 正答率(トレーニング) = 0.89
                : 190. 正答率(テスト) = 0.8753
Generation: 200. 正答率(トレーニング) = 0.85
                : 200. 正答率(テスト) = 0.897
Generation: 210. 正答率(トレーニング) = 0.84
                : 210. 正答率(テスト) = 0.9006
Generation: 220. 正答率(トレーニング) = 0.91
                : 220. 正答率(テスト) = 0.8958
Generation: 230. 正答率(トレーニング) = 0.86
                : 230. 正答率(テスト) = 0.8958
Generation: 240. 正答率(トレーニング) = 0.9
                : 240. 正答率(テスト) = 0.9028
Generation: 250. 正答率(トレーニング) = 0.86
                : 250. 正答率(テスト) = 0.9046
Generation: 260. 正答率(トレーニング) = 0.89
                : 260. 正答率(テスト) = 0.9094
Generation: 270. 正答率(トレーニング) = 0.91
                : 270. 正答率(テスト) = 0.9008
Generation: 280. 正答率(トレーニング) = 0.92
                : 280. 正答率(テスト) = 0.9085
Generation: 290. 正答率(トレーニング) = 0.89
                : 290. 正答率(テスト) = 0.9054
Generation: 300. 正答率(トレーニング) = 0.91
                : 300. 正答率(テスト) = 0.9052
Generation: 310. 正答率(トレーニング) = 0.91
                : 310. 正答率(テスト) = 0.9123
Generation: 320. 正答率(トレーニング) = 0.9
                : 320. 正答率(テスト) = 0.9125
Generation: 330. 正答率(トレーニング) = 0.9
                : 330. 正答率(テスト) = 0.903
Generation: 340. 正答率(トレーニング) = 0.93
                : 340. 正答率(テスト) = 0.9165
Generation: 350. 正答率(トレーニング) = 0.93
                : 350. 正答率(テスト) = 0.9151
Generation: 360. 正答率(トレーニング) = 0.87
                : 360. 正答率(テスト) = 0.9063
Generation: 370. 正答率(トレーニング) = 0.91
                : 370. 正答率(テスト) = 0.9175
Generation: 380. 正答率(トレーニング) = 0.91
                : 380. 正答率(テスト) = 0.9139
Generation: 390. 正答率(トレーニング) = 0.91
                : 390. 正答率(テスト) = 0.9173
Generation: 400. 正答率(トレーニング) = 0.91
                : 400. 正答率(テスト) = 0.9079
Generation: 410. 正答率(トレーニング) = 0.88
                : 410. 正答率(テスト) = 0.9138
Generation: 420. 正答率(トレーニング) = 0.89
                : 420. 正答率(テスト) = 0.9133
Generation: 430. 正答率(トレーニング) = 0.88
                : 430. 正答率(テスト) = 0.9177
Generation: 440. 正答率(トレーニング) = 0.91
                : 440. 正答率(テスト) = 0.9214
Generation: 450. 正答率(トレーニング) = 0.93
                : 450. 正答率(テスト) = 0.9262
Generation: 460. 正答率(トレーニング) = 0.94
                : 460. 正答率(テスト) = 0.924
Generation: 470. 正答率(トレーニング) = 0.91
                : 470. 正答率(テスト) = 0.9219
Generation: 480. 正答率(トレーニング) = 0.91
                : 480. 正答率(テスト) = 0.9197
Generation: 490. 正答率(トレーニング) = 0.94
                : 490. 正答率(テスト) = 0.9202
Generation: 500. 正答率(トレーニング) = 0.85
                : 500. 正答率(テスト) = 0.9224
Generation: 510. 正答率(トレーニング) = 0.92
                : 510. 正答率(テスト) = 0.925
Generation: 520. 正答率(トレーニング) = 0.91
                : 520. 正答率(テスト) = 0.9224
Generation: 530. 正答率(トレーニング) = 0.95
                : 530. 正答率(テスト) = 0.9263
Generation: 540. 正答率(トレーニング) = 0.95
                : 540. 正答率(テスト) = 0.9233
Generation: 550. 正答率(トレーニング) = 0.9
                : 550. 正答率(テスト) = 0.9257
Generation: 560. 正答率(トレーニング) = 0.91
                : 560. 正答率(テスト) = 0.9229
Generation: 570. 正答率(トレーニング) = 0.9
                : 570. 正答率(テスト) = 0.9242
Generation: 580. 正答率(トレーニング) = 0.94
                : 580. 正答率(テスト) = 0.9202
Generation: 590. 正答率(トレーニング) = 0.95
                : 590. 正答率(テスト) = 0.9292
Generation: 600. 正答率(トレーニング) = 0.95
                : 600. 正答率(テスト) = 0.9284
Generation: 610. 正答率(トレーニング) = 0.89
                : 610. 正答率(テスト) = 0.9248
Generation: 620. 正答率(トレーニング) = 0.91
                : 620. 正答率(テスト) = 0.9269
Generation: 630. 正答率(トレーニング) = 0.95
                : 630. 正答率(テスト) = 0.9316
Generation: 640. 正答率(トレーニング) = 0.93
                : 640. 正答率(テスト) = 0.9291
Generation: 650. 正答率(トレーニング) = 0.95
                : 650. 正答率(テスト) = 0.9324
Generation: 660. 正答率(トレーニング) = 0.95
                : 660. 正答率(テスト) = 0.9274
Generation: 670. 正答率(トレーニング) = 0.91
                : 670. 正答率(テスト) = 0.9232
Generation: 680. 正答率(トレーニング) = 0.93
                : 680. 正答率(テスト) = 0.9321
Generation: 690. 正答率(トレーニング) = 0.94
                : 690. 正答率(テスト) = 0.9277
Generation: 700. 正答率(トレーニング) = 0.95
                : 700. 正答率(テスト) = 0.9243
Generation: 710. 正答率(トレーニング) = 0.92
                : 710. 正答率(テスト) = 0.928
Generation: 720. 正答率(トレーニング) = 0.95
                : 720. 正答率(テスト) = 0.9311
Generation: 730. 正答率(トレーニング) = 0.94
                : 730. 正答率(テスト) = 0.933
Generation: 740. 正答率(トレーニング) = 0.94
                : 740. 正答率(テスト) = 0.9259
Generation: 750. 正答率(トレーニング) = 0.92
                : 750. 正答率(テスト) = 0.9304
Generation: 760. 正答率(トレーニング) = 0.92
                : 760. 正答率(テスト) = 0.9334
Generation: 770. 正答率(トレーニング) = 0.95
                : 770. 正答率(テスト) = 0.9335
Generation: 780. 正答率(トレーニング) = 0.94
                : 780. 正答率(テスト) = 0.9341
Generation: 790. 正答率(トレーニング) = 0.91
                : 790. 正答率(テスト) = 0.9314
Generation: 800. 正答率(トレーニング) = 0.93
                : 800. 正答率(テスト) = 0.9304
Generation: 810. 正答率(トレーニング) = 0.95
                : 810. 正答率(テスト) = 0.9331
Generation: 820. 正答率(トレーニング) = 0.95
                : 820. 正答率(テスト) = 0.9319
Generation: 830. 正答率(トレーニング) = 0.9
                : 830. 正答率(テスト) = 0.9346
Generation: 840. 正答率(トレーニング) = 0.93
                : 840. 正答率(テスト) = 0.9371
Generation: 850. 正答率(トレーニング) = 0.93
                : 850. 正答率(テスト) = 0.931
Generation: 860. 正答率(トレーニング) = 0.96
                : 860. 正答率(テスト) = 0.936
Generation: 870. 正答率(トレーニング) = 0.94
                : 870. 正答率(テスト) = 0.936
Generation: 880. 正答率(トレーニング) = 0.93
                : 880. 正答率(テスト) = 0.9407
Generation: 890. 正答率(トレーニング) = 0.93
                : 890. 正答率(テスト) = 0.9355
Generation: 900. 正答率(トレーニング) = 0.93
                : 900. 正答率(テスト) = 0.9332
Generation: 910. 正答率(トレーニング) = 0.95
                : 910. 正答率(テスト) = 0.9357
Generation: 920. 正答率(トレーニング) = 0.95
                : 920. 正答率(テスト) = 0.9378
Generation: 930. 正答率(トレーニング) = 0.93
                : 930. 正答率(テスト) = 0.9404
Generation: 940. 正答率(トレーニング) = 0.9
                : 940. 正答率(テスト) = 0.9401
Generation: 950. 正答率(トレーニング) = 0.92
                : 950. 正答率(テスト) = 0.939
Generation: 960. 正答率(トレーニング) = 0.97
                : 960. 正答率(テスト) = 0.9425
Generation: 970. 正答率(トレーニング) = 0.92
                : 970. 正答率(テスト) = 0.9417
Generation: 980. 正答率(トレーニング) = 0.88
                : 980. 正答率(テスト) = 0.9369
Generation: 990. 正答率(トレーニング) = 0.94
                : 990. 正答率(テスト) = 0.9419
Generation: 1000. 正答率(トレーニング) = 0.96
                : 1000. 正答率(テスト) = 0.9339
Generation: 1010. 正答率(トレーニング) = 0.92
                : 1010. 正答率(テスト) = 0.9294
Generation: 1020. 正答率(トレーニング) = 0.91
                : 1020. 正答率(テスト) = 0.9387
Generation: 1030. 正答率(トレーニング) = 0.97
                : 1030. 正答率(テスト) = 0.9382
Generation: 1040. 正答率(トレーニング) = 0.94
                : 1040. 正答率(テスト) = 0.9334
Generation: 1050. 正答率(トレーニング) = 0.97
                : 1050. 正答率(テスト) = 0.9413
Generation: 1060. 正答率(トレーニング) = 0.96
                : 1060. 正答率(テスト) = 0.937
Generation: 1070. 正答率(トレーニング) = 0.96
                : 1070. 正答率(テスト) = 0.9399
Generation: 1080. 正答率(トレーニング) = 0.97
                : 1080. 正答率(テスト) = 0.9372
Generation: 1090. 正答率(トレーニング) = 0.93
                : 1090. 正答率(テスト) = 0.9413
Generation: 1100. 正答率(トレーニング) = 0.95
                : 1100. 正答率(テスト) = 0.9428
Generation: 1110. 正答率(トレーニング) = 0.94
                : 1110. 正答率(テスト) = 0.9396
Generation: 1120. 正答率(トレーニング) = 0.91
                : 1120. 正答率(テスト) = 0.9374
Generation: 1130. 正答率(トレーニング) = 0.96
                : 1130. 正答率(テスト) = 0.9448
Generation: 1140. 正答率(トレーニング) = 0.93
                : 1140. 正答率(テスト) = 0.9408
Generation: 1150. 正答率(トレーニング) = 0.96
                : 1150. 正答率(テスト) = 0.9421
Generation: 1160. 正答率(トレーニング) = 0.96
                : 1160. 正答率(テスト) = 0.9417
Generation: 1170. 正答率(トレーニング) = 0.97
                : 1170. 正答率(テスト) = 0.9452
Generation: 1180. 正答率(トレーニング) = 0.95
                : 1180. 正答率(テスト) = 0.9436
Generation: 1190. 正答率(トレーニング) = 0.93
                : 1190. 正答率(テスト) = 0.9453
Generation: 1200. 正答率(トレーニング) = 0.96
                : 1200. 正答率(テスト) = 0.9441
Generation: 1210. 正答率(トレーニング) = 0.95
                : 1210. 正答率(テスト) = 0.9402
Generation: 1220. 正答率(トレーニング) = 0.98
                : 1220. 正答率(テスト) = 0.9422
Generation: 1230. 正答率(トレーニング) = 0.97
                : 1230. 正答率(テスト) = 0.9351
Generation: 1240. 正答率(トレーニング) = 0.97
                : 1240. 正答率(テスト) = 0.9425
Generation: 1250. 正答率(トレーニング) = 0.96
                : 1250. 正答率(テスト) = 0.9417
Generation: 1260. 正答率(トレーニング) = 0.94
                : 1260. 正答率(テスト) = 0.9424
Generation: 1270. 正答率(トレーニング) = 0.95
                : 1270. 正答率(テスト) = 0.9385
Generation: 1280. 正答率(トレーニング) = 0.9
                : 1280. 正答率(テスト) = 0.9445
Generation: 1290. 正答率(トレーニング) = 0.93
                : 1290. 正答率(テスト) = 0.9464
Generation: 1300. 正答率(トレーニング) = 0.95
                : 1300. 正答率(テスト) = 0.9478
Generation: 1310. 正答率(トレーニング) = 0.94
                : 1310. 正答率(テスト) = 0.9454
Generation: 1320. 正答率(トレーニング) = 0.98
                : 1320. 正答率(テスト) = 0.9436
Generation: 1330. 正答率(トレーニング) = 0.9
                : 1330. 正答率(テスト) = 0.948
Generation: 1340. 正答率(トレーニング) = 0.91
                : 1340. 正答率(テスト) = 0.9444
Generation: 1350. 正答率(トレーニング) = 0.91
                : 1350. 正答率(テスト) = 0.9483
Generation: 1360. 正答率(トレーニング) = 0.94
                : 1360. 正答率(テスト) = 0.9472
Generation: 1370. 正答率(トレーニング) = 0.92
                : 1370. 正答率(テスト) = 0.9466
Generation: 1380. 正答率(トレーニング) = 0.97
                : 1380. 正答率(テスト) = 0.9472
Generation: 1390. 正答率(トレーニング) = 0.95
                : 1390. 正答率(テスト) = 0.9466
Generation: 1400. 正答率(トレーニング) = 0.95
                : 1400. 正答率(テスト) = 0.948
Generation: 1410. 正答率(トレーニング) = 0.94
                : 1410. 正答率(テスト) = 0.9503
Generation: 1420. 正答率(トレーニング) = 0.97
                : 1420. 正答率(テスト) = 0.9473
Generation: 1430. 正答率(トレーニング) = 0.96
                : 1430. 正答率(テスト) = 0.9481
Generation: 1440. 正答率(トレーニング) = 0.93
                : 1440. 正答率(テスト) = 0.9484
Generation: 1450. 正答率(トレーニング) = 0.99
                : 1450. 正答率(テスト) = 0.9493
Generation: 1460. 正答率(トレーニング) = 0.97
                : 1460. 正答率(テスト) = 0.9499
Generation: 1470. 正答率(トレーニング) = 0.95
                : 1470. 正答率(テスト) = 0.9469
Generation: 1480. 正答率(トレーニング) = 0.94
                : 1480. 正答率(テスト) = 0.9495
Generation: 1490. 正答率(トレーニング) = 0.94
                : 1490. 正答率(テスト) = 0.9489
Generation: 1500. 正答率(トレーニング) = 0.94
                : 1500. 正答率(テスト) = 0.9504
Generation: 1510. 正答率(トレーニング) = 0.95
                : 1510. 正答率(テスト) = 0.9507
Generation: 1520. 正答率(トレーニング) = 0.93
                : 1520. 正答率(テスト) = 0.9439
Generation: 1530. 正答率(トレーニング) = 0.95
                : 1530. 正答率(テスト) = 0.9499
Generation: 1540. 正答率(トレーニング) = 0.99
                : 1540. 正答率(テスト) = 0.9504
Generation: 1550. 正答率(トレーニング) = 0.94
                : 1550. 正答率(テスト) = 0.9499
Generation: 1560. 正答率(トレーニング) = 0.94
                : 1560. 正答率(テスト) = 0.9462
Generation: 1570. 正答率(トレーニング) = 0.96
                : 1570. 正答率(テスト) = 0.9499
Generation: 1580. 正答率(トレーニング) = 0.96
                : 1580. 正答率(テスト) = 0.943
Generation: 1590. 正答率(トレーニング) = 0.95
                : 1590. 正答率(テスト) = 0.9475
Generation: 1600. 正答率(トレーニング) = 0.93
                : 1600. 正答率(テスト) = 0.951
Generation: 1610. 正答率(トレーニング) = 0.94
                : 1610. 正答率(テスト) = 0.9514
Generation: 1620. 正答率(トレーニング) = 0.96
                : 1620. 正答率(テスト) = 0.951
Generation: 1630. 正答率(トレーニング) = 0.95
                : 1630. 正答率(テスト) = 0.952
Generation: 1640. 正答率(トレーニング) = 0.95
                : 1640. 正答率(テスト) = 0.9491
Generation: 1650. 正答率(トレーニング) = 0.98
                : 1650. 正答率(テスト) = 0.9508
Generation: 1660. 正答率(トレーニング) = 0.98
                : 1660. 正答率(テスト) = 0.9518
Generation: 1670. 正答率(トレーニング) = 0.98
                : 1670. 正答率(テスト) = 0.9501
Generation: 1680. 正答率(トレーニング) = 0.99
                : 1680. 正答率(テスト) = 0.9518
Generation: 1690. 正答率(トレーニング) = 0.93
                : 1690. 正答率(テスト) = 0.9486
Generation: 1700. 正答率(トレーニング) = 0.95
                : 1700. 正答率(テスト) = 0.9467
Generation: 1710. 正答率(トレーニング) = 0.93
                : 1710. 正答率(テスト) = 0.956
Generation: 1720. 正答率(トレーニング) = 0.93
                : 1720. 正答率(テスト) = 0.9499
Generation: 1730. 正答率(トレーニング) = 0.95
                : 1730. 正答率(テスト) = 0.9527
Generation: 1740. 正答率(トレーニング) = 0.95
                : 1740. 正答率(テスト) = 0.9533
Generation: 1750. 正答率(トレーニング) = 0.93
                : 1750. 正答率(テスト) = 0.9554
Generation: 1760. 正答率(トレーニング) = 0.94
                : 1760. 正答率(テスト) = 0.9475
Generation: 1770. 正答率(トレーニング) = 0.95
                : 1770. 正答率(テスト) = 0.9527
Generation: 1780. 正答率(トレーニング) = 0.93
                : 1780. 正答率(テスト) = 0.9506
Generation: 1790. 正答率(トレーニング) = 0.95
                : 1790. 正答率(テスト) = 0.9531
Generation: 1800. 正答率(トレーニング) = 0.96
                : 1800. 正答率(テスト) = 0.948
Generation: 1810. 正答率(トレーニング) = 0.93
                : 1810. 正答率(テスト) = 0.9544
Generation: 1820. 正答率(トレーニング) = 0.95
                : 1820. 正答率(テスト) = 0.9528
Generation: 1830. 正答率(トレーニング) = 0.96
                : 1830. 正答率(テスト) = 0.9559
Generation: 1840. 正答率(トレーニング) = 0.99
                : 1840. 正答率(テスト) = 0.9544
Generation: 1850. 正答率(トレーニング) = 0.97
                : 1850. 正答率(テスト) = 0.9538
Generation: 1860. 正答率(トレーニング) = 0.99
                : 1860. 正答率(テスト) = 0.9543
Generation: 1870. 正答率(トレーニング) = 0.96
                : 1870. 正答率(テスト) = 0.9534
Generation: 1880. 正答率(トレーニング) = 0.98
                : 1880. 正答率(テスト) = 0.9532
Generation: 1890. 正答率(トレーニング) = 0.96
                : 1890. 正答率(テスト) = 0.9539
Generation: 1900. 正答率(トレーニング) = 0.95
                : 1900. 正答率(テスト) = 0.9545
Generation: 1910. 正答率(トレーニング) = 0.99
                : 1910. 正答率(テスト) = 0.9549
Generation: 1920. 正答率(トレーニング) = 0.96
                : 1920. 正答率(テスト) = 0.9551
Generation: 1930. 正答率(トレーニング) = 0.95
                : 1930. 正答率(テスト) = 0.9537
Generation: 1940. 正答率(トレーニング) = 0.96
                : 1940. 正答率(テスト) = 0.9534
Generation: 1950. 正答率(トレーニング) = 0.96
                : 1950. 正答率(テスト) = 0.9519
Generation: 1960. 正答率(トレーニング) = 0.96
                : 1960. 正答率(テスト) = 0.9565
Generation: 1970. 正答率(トレーニング) = 0.95
                : 1970. 正答率(テスト) = 0.9496
Generation: 1980. 正答率(トレーニング) = 0.95
                : 1980. 正答率(テスト) = 0.9488
Generation: 1990. 正答率(トレーニング) = 0.94
                : 1990. 正答率(テスト) = 0.954
Generation: 2000. 正答率(トレーニング) = 0.95
                : 2000. 正答率(テスト) = 0.954
In [10]:
pip install nbconvert
Requirement already satisfied: nbconvert in /usr/local/lib/python3.6/dist-packages (5.6.1)
Requirement already satisfied: jinja2>=2.4 in /usr/local/lib/python3.6/dist-packages (from nbconvert) (2.11.2)
Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.6/dist-packages (from nbconvert) (1.4.3)
Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.6/dist-packages (from nbconvert) (0.8.4)
Requirement already satisfied: traitlets>=4.2 in /usr/local/lib/python3.6/dist-packages (from nbconvert) (4.3.3)
Requirement already satisfied: nbformat>=4.4 in /usr/local/lib/python3.6/dist-packages (from nbconvert) (5.0.8)
Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.6/dist-packages (from nbconvert) (0.3)
Requirement already satisfied: pygments in /usr/local/lib/python3.6/dist-packages (from nbconvert) (2.6.1)
Requirement already satisfied: jupyter-core in /usr/local/lib/python3.6/dist-packages (from nbconvert) (4.7.0)
Requirement already satisfied: bleach in /usr/local/lib/python3.6/dist-packages (from nbconvert) (3.2.1)
Requirement already satisfied: testpath in /usr/local/lib/python3.6/dist-packages (from nbconvert) (0.4.4)
Requirement already satisfied: defusedxml in /usr/local/lib/python3.6/dist-packages (from nbconvert) (0.6.0)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.6/dist-packages (from jinja2>=2.4->nbconvert) (1.1.1)
Requirement already satisfied: decorator in /usr/local/lib/python3.6/dist-packages (from traitlets>=4.2->nbconvert) (4.4.2)
Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.6/dist-packages (from traitlets>=4.2->nbconvert) (0.2.0)
Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from traitlets>=4.2->nbconvert) (1.15.0)
Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /usr/local/lib/python3.6/dist-packages (from nbformat>=4.4->nbconvert) (2.6.0)
Requirement already satisfied: webencodings in /usr/local/lib/python3.6/dist-packages (from bleach->nbconvert) (0.5.1)
Requirement already satisfied: packaging in /usr/local/lib/python3.6/dist-packages (from bleach->nbconvert) (20.4)
Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python3.6/dist-packages (from packaging->bleach->nbconvert) (2.4.7)
In [ ]:
!jupyter nbconvert --to html 2_2_1_vanishing_gradient.ipynb