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