teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

解説の追記

2017/07/15 05:22

投稿

MasashiKimura
MasashiKimura

スコア1150

answer CHANGED
@@ -109,5 +109,24 @@
109
109
  sess2.close()
110
110
  ```
111
111
 
112
+ inference()の中で hidden_bias と output_biasをprintすると以下のようになります。
113
+ ```
114
+ <tf.Variable 'hidden1/hidden1_bias:0' shape=(40,) dtype=float32_ref>
115
+ <tf.Variable 'output/output_bias:0' shape=(1,) dtype=float32_ref>
116
+ saku2
117
+
118
+ <tf.Variable 'hidden1_1/hidden1_bias:0' shape=(40,) dtype=float32_ref>
119
+ <tf.Variable 'output_1/output_bias:0' shape=(1,) dtype=float32_ref>
120
+ ```
121
+
122
+ hidden1, と hidden1_1、outputと output1_1 と違うnamesopeの変数になっています。したがって、
123
+ hidden1/hidden_biasは restoreによって初期化されますが、 hidden1_1/hidden_bias は初期化されていません。
124
+
112
- なるべく元コードを維持したま、動くようにました
125
+ variable 宣言は一回にとめるようにすると良いでょう
126
+ もともと、このプログラムが学習→保存と、読込→実行が別のスクリプトであれば起きない問題ではあります。
127
+
128
+ しかし、Tensorflow は Define and Run でテンソルの演算を行います。計算グラフの定義と実行を別々に行うモデルです。このプログラムが、計算グラフの定義と実行をごちゃごちゃにしているので、わかりにくくなっていると思います。
129
+
130
+ ディープラーニングの計算を普通のプログラムと同じように書きたいのでしたら PyTorch みたいな Define by Runのライブラリが良いかもしれません。あるいは、Kerasのようなライブラリだと Define and Run を強制させられるので、そのあたりのつまづきは少ないです。
131
+
113
- 時間の都合がつかないので、解説後回しにさせてください。(または他の方よろしくお願いします。
132
+ ディープラーニング初心者の方には TensorFlowり Kerasを勧めます。