我需要根据当前的输入数据构建我的图形结构。
这意味着我可能需要在每个列车步骤使用不同的图形结构。
但是tensorflow只构造一次图形并使用它直到结束。
那么,这个问题是否有解决方案?
像这样的简单代码:import tensorflow as tf
data = [[1, 2, 3],
[3, 2, 1]]
index = 0
def feed_dict():
return data[index]
with tf.Session() as sess:
embedding = tf.constant([[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]])
words = tf.placeholder(tf.int32, [3])
sess.run(tf.initialize_all_variables())
embed = tf.nn.embedding_lookup(embedding, words)
word_list = tf.unpack(embed)
result = None
if tf.less(tf.reduce_sum(word_list[0]), tf.reduce_sum(word_list[1])).eval(feed_dict={words: feed_dict()}):
result = word_list[0] * word_list[1] + word_list[2]
else:
result = word_list[0] + word_list[1] * word_list[2]
for i in xrange(2):
print sess.run(result, feed_dict={words: feed_dict()})
index += 1
我希望它能打印出来:
[10, 10, 10]
[10, 10, 10]
但我明白了:
[10, 10, 10]
[14, 14, 14]
它告诉第二次运行使用与第一次运行相同的图表。
感谢您的阅读!我会感激你的每一个帮助。
答案 0 :(得分:0)
这些是预期的结果。
首先,您评估tf.less
,因此result
始终为result = world_list[0] * word_list[1] + word_list[2]
。
请注意,嵌入是从零开始的,因此在第一种情况下,您将获得2 * 3 + 4 = 10
,而在第二种4 * 3 + 2 = 14
中则会打印出来。
如果您想在运行时评估tf.less
,请使用tf.cond
。