回答編集履歴
1
解説の追記
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を勧めます。
|