Tensorflowモデルを保存して再利用しようとしています。Tensorflowで保存されたモデルをロードすると、非常に高いコスト値が得られます
この問題をはっきりと理解するために、10個の要素で構成されるバイナリデータセットを作成し、この10個の要素に対して繰り返しトレーニングを実行しますが、100回の繰り返しごとにモデルを保存します。 その後、同じセットでテストを実行します。理想的には、モデルが保存されるまでに同じコストを試すことが期待されます。 は、しかし、おそらく私が何かを欠場し、訓練されたモデルをロードすると予想されるコスト値与えるものではありません:私は300番目の反復中に保存されたモデルを読み込む場合は今
Step 0, cost 1.10902
Step 100, cost 0.83170
Step 200, cost 0.00003
Step 300, cost 0.00000
:
def model(X, w1, w2, w3, w4, wo, p_keep_conv, p_keep_hidden):
l1 = tf.nn.relu(tf.nn.conv2d(X, w1, strides=[1, 1, 1, 1], padding='SAME'))
l1 = tf.nn.max_pool(l1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
l1 = tf.nn.dropout(l1, p_keep_conv)
# ... other layer def.s
l4 = tf.nn.relu(tf.matmul(l3, w4))
l4 = tf.nn.dropout(l4, p_keep_hidden)
return tf.matmul(l4, wo, name="pyx")
X = tf.placeholder("float", [None, size1, size2, size3], name="X")
Y = tf.placeholder("float", [None, 1], name="Y")
py_x = model(X, wo, p_keep_conv, p_keep_hidden)
cost = tf.reduce_mean(tf.nn.weighted_cross_entropy_with_logits(logits=py_x, targets=Y, pos_weight=POS_WEIGHT))
train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost)
with tf.Session() as sess:
batch_x, batch_y = read_file('train.dat', 10)
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver(tf.global_variables())
for step in range(NUM_TRAIN_BATCHES):
x, y = sess.run([batch_x, batch_y])
_, costval = sess.run([train_op, cost], feed_dict={X: x, Y: y, p_keep_conv: 0.8, p_keep_hidden: 0.5})
if step % 100 == 0
print("Step %d, cost %1.5f" % (step, cost_value))
saver.save(sess, './train.model', global_step=step)
上記のコードを印刷下記を
model_no = 300
with tf.Session() as sess:
saver = tf.train.import_meta_graph('./train.model-%d.meta' % (model_no))
saver.restore(sess, tf.train.latest_checkpoint('./'))
batch_x, batch_y = read_file('train.dat', 10)
sess.run(tf.global_variables_initializer())
x, y = sess.run([batch_x, batch_y])
cost_value = sess.run(cost, feed_dict={"X:0": x, "Y:0": y, p_keep_conv: 0.8, p_keep_hidden: 0.5})
print("cost %1.5f" % (cost_value))
そして、上記プリント:
と同じデータに適用してみてください3210cost loss 1.10895
これは、モデルトレーニングの最初の反復に非常に近いです。それはどのように支援し、どのようなチェックポイントが唯一のパスが含まれている場合saver.restore(sess, tf.train.latest_checkpoint('./'))
を呼び出すの背後にある考え方だん
model_checkpoint_path: "train.model-300"
all_model_checkpoint_paths: "train.model-0"
all_model_checkpoint_paths: "train.model-100"
all_model_checkpoint_paths: "train.model-200"
all_model_checkpoint_paths: "train.model-300"
:
また、私は周りに私の頭を取得することはできません別のものにのみ以下含まれているチェックポイントファイルであり、モデルファイルと私は明示的に特定のモデルを読み込みますか?
テストでは、通常、すべてのドロップアウトレイヤーの保持確率を1に設定したいと考えています。 – aseipel
OK、私はsaver = ..の前にsess.run(tf.global_variables_initializer())を移動しました。コストは依然として1.10919 –
トレーニング中の無作為抽出の欠点を除いて、他には明白なことはありません。あなたのデータが適切にランダム化されていますか? – etarion