私は2つのグラフを保存しています。 1つは2X2のゼロテンソルを持ち、もう1つは同じサイズのテンソルを持つものです。私は条件に応じてそれらの1つを復元します。tf.Session()はwithブロックを終了しても一見閉じられません
import tensorflow as tf
def save_zero():
# save a 2x2 variable filled with zeros
with tf.Graph().as_default():
session = tf.Session()
with tf.name_scope('dummy_graph'):
tf.Variable([[0.0, 0.0], [0.0, 0.0]], name='a', dtype=tf.float32)
init_op = tf.global_variables_initializer()
session.run(init_op)
saver = tf.train.Saver()
saver.save(session, 'zero')
session.close()
def save_one():
# save a 2x2 variable filled with ones
with tf.Graph().as_default():
session = tf.Session()
with tf.name_scope('dummy_graph'):
tf.Variable([[1.0, 1.0], [1.0, 1.0]], name='a', dtype=tf.float32)
init_op = tf.global_variables_initializer()
session.run(init_op)
saver = tf.train.Saver()
saver.save(session, 'one')
session.close()
def test(boolean):
with tf.Session() as session:
if boolean:
saver = tf.train.import_meta_graph('one.meta')
saver.restore(session, './one')
session.run(session.graph.get_operation_by_name('init'))
tensor = session.graph.get_tensor_by_name('dummy_graph/a:0')
else:
saver = tf.train.import_meta_graph('zero.meta')
saver.restore(session, './zero')
session.run(session.graph.get_operation_by_name('init'))
tensor = session.graph.get_tensor_by_name('dummy_graph/a:0')
return session.run(tensor)
save_zero()
save_one()
print(test(False))
print(test(True))
test
の呼び出しは両方ともゼロを返します。
def test(boolean):
with tf.Session() as session:
if boolean:
saver = tf.train.import_meta_graph('one.meta')
saver.restore(session, './one')
# contains duplicate ops (suffixed with '_1')
[print(op.name) for op in session.graph.get_operations()]
session.run(session.graph.get_operation_by_name('init'))
tensor = session.graph.get_tensor_by_name('dummy_graph/a:0')
else:
saver = tf.train.import_meta_graph('zero.meta')
saver.restore(session, './zero')
session.run(session.graph.get_operation_by_name('init'))
tensor = session.graph.get_tensor_by_name('dummy_graph/a:0')
return session.run(tensor)
このバグであるか私が行方不明です:セッションでOPSを観察するtest
戻り時にtest
でセッションが閉じられている私の知る限りは、セッションとして起こることを想定されていないの二つの呼び出しで再利用されていることを示唆しています何か?
問題があるかどうかはわかりませんが、セッションを閉じることなく両方の保存機能でセッションを開きます。 save_one()とsave_zero()の両方の終わりにsession.close()を追加しても問題が解決するかどうか確認できますか? –
@MadWombatそれは問題ではありません。とにかくありがとう。 – Priyatham
どのバージョン?私は2つの 'test'コールとは異なる結果を得ます。0.12 –