张量流可以修改每个列车步骤的图形结构吗?

时间:2016-11-08 13:47:15

标签: python-2.7 tensorflow deep-learning

我需要根据当前的输入数据构建我的图形结构。

这意味着我可能需要在每个列车步骤使用不同的图形结构。

但是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]

它告诉第二次运行使用与第一次运行相同的图表。

感谢您的阅读!我会感激你的每一个帮助。

1 个答案:

答案 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