質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

318閲覧

三層ニューラルネットワークの学習誤差が分かりません

cocoa_

総合スコア12

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/24 11:07

ネットにあった三層ニューラルネットワークのサンプルを使用して画像認識をしているのですが学習誤差がどれなのかがわかりません。どなたか教えてください。


ソースコード

python

1import numpy as np 2 3sigmoid_range = 34.538776394910684 4 5def sigmoid(x): 6 return 1.0 / (1.0 + np.exp(-np.clip(x, -sigmoid_range, sigmoid_range))) 7 8def derivative_sigmoid(o): 9 return o * (1.0 - o) 10 11class ThreeLayerNetwork: 12 # コンストラクタ 13 def __init__(self, inodes, hnodes, onodes, lr): 14 # 各レイヤーのノード数 15 self.inodes = inodes 16 self.hnodes = hnodes 17 self.onodes = onodes 18 19 # 学習率 20 self.lr = lr 21 22 # 重みの初期化 23 self.w_ih = np.random.normal(0.0, 1.0, (self.hnodes, self.inodes)) 24 self.w_ho = np.random.normal(0.0, 1.0, (self.onodes, self.hnodes)) 25 26 # 活性化関数 27 self.af = sigmoid 28 self.daf = derivative_sigmoid 29 30 # 誤差逆伝搬 31 def backprop(self, idata, tdata): 32 # 縦ベクトルに変換 33 o_i = np.array(idata, ndmin=2).T 34 t = np.array(tdata, ndmin=2).T 35 36 # 隠れ層 37 x_h = np.dot(self.w_ih, o_i) 38 o_h = self.af(x_h) 39 40 # 出力層 41 x_o = np.dot(self.w_ho, o_h) 42 o_o = self.af(x_o) 43 44 # 誤差計算 45 e_o = (t - o_o) 46 e_h = np.dot(self.w_ho.T, e_o) 47 48 # 重みの更新 49 self.w_ho += self.lr * np.dot((e_o * self.daf(o_o)), o_h.T) 50 self.w_ih += self.lr * np.dot((e_h * self.daf(o_h)), o_i.T) 51 52 def feedforward(self, idata): 53 # 入力のリストを縦ベクトルに変換 54 o_i = np.array(idata, ndmin=2).T 55 56 # 隠れ層 57 x_h = np.dot(self.w_ih, o_i) 58 o_h = self.af(x_h) 59 60 # 出力層 61 x_o = np.dot(self.w_ho, o_h) 62 o_o = self.af(x_o) 63 64 return o_o 65 66if __name__=='__main__': 67 # パラメータ 68 inodes = 784 69 hnodes = 100 70 onodes = 10 71 lr = 0.3 72 73 # ニューラルネットワークの初期化 74 nn = ThreeLayerNetwork(inodes, hnodes, onodes, lr) 75 76 # トレーニングデータのロード 77 training_data_file = open('mnist_train.csv', 'r') 78 training_data_list = training_data_file.readlines() 79 training_data_file.close() 80 81 # テストデータのロード 82 test_data_file = open('mnist_test.csv') 83 test_data_list = test_data_file.readlines() 84 test_data_file.close() 85 86 # 学習 87 epoch = 10 88 for e in range(epoch): 89 print('#epoch ', e) 90 data_size = len(training_data_list) 91 for i in range(data_size): 92 if i % 1000 == 0: 93 print(' train: {0:>5d} / {1:>5d}'.format(i, data_size)) 94 val = training_data_list[i].split(',') 95 idata = (np.asfarray(val[1:]) / 255.0 * 0.99) + 0.01 96 tdata = np.zeros(onodes) + 0.01 97 tdata[int(val[0])] = 0.99 98 nn.backprop(idata, tdata) 99 pass 100 pass 101 102 # テスト 103 scoreboard = [] 104 for record in test_data_list: 105 val = record.split(',') 106 idata = (np.asfarray(val[1:]) / 255.0 * 0.99) + 0.01 107 tlabel = int(val[0]) 108 predict = nn.feedforward(idata) 109 plabel = np.argmax(predict) 110 scoreboard.append(tlabel == plabel) 111 pass 112 113 scoreboard_array = np.asarray(scoreboard) 114 print('performance: ', scoreboard_array.sum() / scoreboard_array.size)

試したこととして一通りprintで出してみましたがわかりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

firedfly

2019/01/24 11:43

こんにちは。 ではまず機械学習における学習誤差とはなにかをcocoa_さんの言葉で教えてください。
cocoa_

2019/01/24 12:07

こんにちは。 学習データで学習できているかを知る値
firedfly

2019/01/24 12:15

ふむふむ。 学習誤差と最後に出力しているperformanceの値との違いはなんですか?
cocoa_

2019/01/24 12:26

performanceは学習データとテストデータを比較してテストデータが合っているかの値
firedfly

2019/01/24 13:12

それはちょっと違います……。 学習データとテストデータというのは、それぞれなんですか。
cocoa_

2019/01/24 13:40

学習データはその画像が何かを知るためのデータ テストデータは学習データをもとに判断するデータ
firedfly

2019/01/24 13:43

そこから勘違いしているようだと このコードを理解するのは難しいです。 機械学習の基礎から勉強するといいですよ。
cocoa_

2019/01/24 13:54

わかりました 基礎からやり直します
guest

回答1

0

そのレベルの質問をする段階だと、このコードは荷が重いです。

Aidemyというオンライン講座に、無料で受けられる「機械学習概論」「Python入門」「ディープラーニング基礎」がありますから、受けてみることをおすすめします。

投稿2019/01/24 13:56

編集2019/01/24 13:56
firedfly

総合スコア1131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cocoa_

2019/01/24 14:12

わかりました ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問