回答編集履歴

1

解説の追記

2017/07/15 05:22

投稿

MasashiKimura
MasashiKimura

スコア1150

test CHANGED
@@ -220,6 +220,44 @@
220
220
 
221
221
 
222
222
 
223
+ inference()の中で hidden_bias と output_biasをprintすると以下のようになります。
224
+
225
+ ```
226
+
227
+ <tf.Variable 'hidden1/hidden1_bias:0' shape=(40,) dtype=float32_ref>
228
+
229
+ <tf.Variable 'output/output_bias:0' shape=(1,) dtype=float32_ref>
230
+
231
+ saku2
232
+
233
+
234
+
235
+ <tf.Variable 'hidden1_1/hidden1_bias:0' shape=(40,) dtype=float32_ref>
236
+
237
+ <tf.Variable 'output_1/output_bias:0' shape=(1,) dtype=float32_ref>
238
+
239
+ ```
240
+
241
+
242
+
243
+ hidden1, と hidden1_1、outputと output1_1 と違うnamesopeの変数になっています。したがって、
244
+
245
+ hidden1/hidden_biasは restoreによって初期化されますが、 hidden1_1/hidden_bias は初期化されていません。
246
+
247
+
248
+
223
- なるべく元コードを維持したま、動くようにました
249
+ variable 宣言は一回にとめるようにすると良いでょう
250
+
224
-
251
+ もともと、このプログラムが学習→保存と、読込→実行が別のスクリプトであれば起きない問題ではあります。
252
+
253
+
254
+
255
+ しかし、Tensorflow は Define and Run でテンソルの演算を行います。計算グラフの定義と実行を別々に行うモデルです。このプログラムが、計算グラフの定義と実行をごちゃごちゃにしているので、わかりにくくなっていると思います。
256
+
257
+
258
+
259
+ ディープラーニングの計算を普通のプログラムと同じように書きたいのでしたら PyTorch みたいな Define by Runのライブラリが良いかもしれません。あるいは、Kerasのようなライブラリだと Define and Run を強制させられるので、そのあたりのつまづきは少ないです。
260
+
261
+
262
+
225
- 時間都合がつかないので、解説は後回しさせてください。(また他の方ろしくお願いします。
263
+ 私はディープラーニング初心者には TensorFlowり Kerasを勧めます。