MonitoredTrainingSession
을 사용해보고 싶지만 열차 및 유효성 검사 집합에 여러 개의 Dataset 개체도 사용합니다. 올바른 문자를 선택하려면 manual에서 문자열 핸들을 사용하는 것이 좋습니다. 그러나 훈련 중에 핸들을 feed_dict
에 전달하려면 먼저 그것을 평가해야합니다. 이처럼 : 나는 MonitoredTrainingSession
의 맥락에서이 작업을 수행 할 때MonitoredTrainingSession의 반복자 핸들 얻기
handle = sess.run(iterator.string_handle())
를, 나는 오류 얻을 : 내가 생각 같은 Scaffold
객체에 대한 init_fn
을 만드는 것이 었습니다,
RuntimeError: Graph is finalized and cannot be modified.
밖으로 방법을하는 나는 그 세션에 합격했다. 그러나 이것은 효과가 없었습니다. 문맥에서 앞서 언급 한 코드를 실행하려고하면 init_fn
은 여전히 같은 오류가 발생합니다. 문서로
약 init_fn
말한다 :
A callable to run after the init op to perform additional initializations.
이것은 제가이 콜백의 의도 된 목적에 근본적으로 틀렸다라고 생각한다, 또는 Tensorflow 무례한 행동.
이 혼란을 해결하도록 도와 주시겠습니까?
내 텐션 흐름 버전은 1.4.0
입니다. 최소한의 예를 추가
UPDATE
. 첫 번째 블록은 작동하지만 두 번째 블록은 작동하지 않습니다.
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)를 제공 할 수 있습니까? –