私はMonitoredTrainingSession
を試してみたいと思いますが、電車と検証セットにはいくつかのDatasetオブジェクトも使用しています。正しい文字列を選択するには、manualは文字列ハンドルを使用することを示唆しています。しかし、トレーニング中にハンドルをfeed_dict
に渡すには、まずそれを評価する必要があります。このように:MonitoredTrainingSessionでイテレータハンドルを取得する
handle = sess.run(iterator.string_handle())
しかし、私はMonitoredTrainingSession
の文脈でこれを行うとき、私はエラーを取得:
RuntimeError: Graph is finalized and cannot be modified.
道うち、私が思ったとして、そのScaffold
オブジェクトに対してinit_fn
を作成することでした私はセッションに入る。しかし、これはうまくいかなかった。私が文脈で上記のコードを実行しようとすると、init_fn
はまだ同じエラーが発生します。ドキュメントとして
はinit_fn
についてこう述べています。
A callable to run after the init op to perform additional initializations.
これは私が、私はこのコールバックの使用目的と根本的に間違っている、またはTensorflowが誤動作することを考えさせます。
この混乱を解決するお手伝いをしてください。
私のテンソルフローバージョンは1.4.0
です。最小の例を追加
UPDATE
。最初のブロックは機能し、2番目のブロックは機能しません。
import tensorflow as tf
dataset_a = tf.data.Dataset.range(10)
dataset_b = tf.data.Dataset.range(20, 25)
input_handle = tf.placeholder(tf.string, shape=())
input_iterator = tf.data.Iterator.from_string_handle(
input_handle, dataset_a.output_types, dataset_a.output_shapes)
x = input_iterator.get_next()
plus_one = tf.add(x, 1)
with tf.Session() as sess:
iterator = dataset_b.make_initializable_iterator()
handle = sess.run(iterator.string_handle())
sess.run(iterator.initializer)
res = sess.run(plus_one, feed_dict={input_handle: handle})
print(res)
with tf.train.MonitoredTrainingSession() as sess:
iterator = dataset_a.make_initializable_iterator()
handle = sess.run(iterator.string_handle())
sess.run(iterator.initializer)
res = sess.run(plus_one, feed_dict={input_handle: handle})
print(res)
あなたは[MCVE](https://stackoverflow.com/help/mcve)を提供できますか? –