https://qiita.com/takahiro_itazuri/items/d2bea1c643d7cca11352#comment-a59cd26161ee56ea1220
この「自分でニューラルネットワークを作ろう」のプログラムの意味ですが、
これはtdataとidata(後、それぞれt,iと表記)を用い、逆伝搬による訓練を繰り返す事でより最適な重みを求め、
そのより最適な重みを用い、順伝搬による判定でiの、tに対する判定精度の高さを測定しているという事でしょうか。
でも実際は「自分で手で描いたデータ」(hと表記)を用いるわけで、
これはiと似ていますが、iと違って「答えが含まれていない」(つまり、データ内に、各手書き画像が表す数字が含まれない)わけで、これに対する逆伝搬による訓練は行えませんよね?
という事は、実際にこのtdataを利用して手書き画像認識を行う場合は、「あからじめ最適とされている重み」を用いるんですよね?
その重みというのは、このプログラムを用いて求める事はできませんよね?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
「# 学習」のforループ内では、「training_data_list (mnist_train.csv)」から「idata」と「tdata」のペアを作り、それを使って誤差逆伝搬で学習して、ニューラルネットの重み(※)を決めます
学習が終わったら、もう「training_data_list (mnist_train.csv)」は使いません
「# テスト」のforループ内では、「test_data_list (mnist_test.csv)」から「idata」と「tlabel」のペアを作り、それを使います
「training_data_list (mnist_train.csv)」は使いません
同じ「idata」という変数名ですが、学習時とは別内容です
まず、「idata」から順伝搬で予測します
その際に使われるニューラルネットの重みは、誤差逆伝搬で学習されたもの(上記※)です
予測結果が「plabel」です
次に、「plabel (予測結果)」と「tlabel (正解)」が一致してるかどうかを調べます
その結果が「scoreboard」で、それから精度(何%が一致したか)を計算します
学習と、テストには、別のデータを使います
「training_data_list (mnist_train.csv)」は、誤差逆伝搬での学習にだけ使います
学習が終わったら役割は終わりで、これを使った精度確認テストはしません (してはいけません)
「test_data_list (mnist_test.csv)」は、精度確認テストにだけ使います
テストの前には学習は済んでいるので、これを使った学習はしません (する必要はありませんし、してはいけません)
正解ラベルが無い画像の場合は、順伝搬での予測だけします
当然、事前に学習が済んでいるのが前提です
投稿2021/05/16 06:42
編集2021/05/16 06:47総合スコア7653
0
当然、重みをプログラムで求めることも可能な場合があります。
(例:体重・身長というパラメータを持つデータ群から、肥満・適正体重を判別するなど)
ただ、複雑は判別になればなるほど、各パラメータを数値計算的に決め打ちするのが難しくなります。
その時に初めてニューラルネットワークの真価が発揮されます。
(GPUによる処理が強いのもココです)
投稿2021/04/11 16:14
総合スコア241
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
学習に使うデータは、人間に対して
ここに0という字を書いてください
ここに1という字を書いてください
ここに2という字を書いてください
:
ここに9という字を書いてください
と依頼して書いてもらった手書き文字データです。
ですから「書いた文字の画像データ」と「書いた人が何の文字のつもりで書いたか」がセットになっています。
「書いた文字の画像データ」がidataで
「書いた人が何の文字のつもりで書いたか」がtdataです。(精確には教師データになるようにそれをone-hotベクトルで表現したもの)
これはtdataとidata(後、それぞれt,iと表記)を用い、逆伝搬による訓練を繰り返す事でより最適な重みを求め、
はい。
正しくは training_data_list から取り出した i と t の組で訓練して最適な重みを求めています。
そのより最適な重みを用い、順伝搬による判定でiの、tに対する判定精度の高さを測定しているという事でしょうか。
言葉が足りません。
順伝搬による判定でtest_data_list から取り出した i と t に対する判定精度の高さを測定している
でしょう。
でも実際は「自分で手で描いたデータ」(hと表記)を用いるわけで、
(略)
これに対する逆伝搬による訓練は行えませんよね?
はい。
訓練が終わったあとの運用では、また訓練するようなコードを書かない限り訓練は行えません。
(コードを書いたとしてもうまく訓練できるとは限らないし、現実問題としてはうまくいかなさそうですが)
という事は、実際にこのtdataを利用して手書き画像認識を行う場合は、「あからじめ最適とされている重み」を用いるんですよね?
"という事は"はどこから繋がっているんでしょう? "このtdata"はどういう意味でしょう?
training_data_listから取り出したtdataは訓練に使います。
test_data_listから取り出したtdataは精度の高さを測定するのに使います。
これらはまずまず理解しているようですが、その上で"このtdataを利用して手書き画像認識を行う"とはどういうことを言っていますか?
投稿2021/04/10 04:44
編集2021/04/10 04:49総合スコア11235
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/10 06:51
2021/04/10 07:03
2021/04/10 07:06
退会済みユーザー
2021/04/10 07:09
2021/04/10 07:13 編集
2021/04/10 07:14
退会済みユーザー
2021/04/10 07:34
退会済みユーザー
2021/04/11 22:42
2021/04/16 06:05
2021/04/16 06:19 編集
0
qiitaならせっかくそこで聞けるようになってるんですから、本人に聞いてみたらどうでしょう
投稿2021/04/10 00:26
総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/04/10 01:03
2021/04/10 04:42
退会済みユーザー
2021/04/10 05:04
2021/04/10 10:01
2021/05/16 06:47
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。