非常奇怪的TensorFlow行为

我有一些非常简单的代码行,却产生了非常奇怪且意想不到的行为:

import tensorflow as tfy = tf.Variable(2, dtype=tf.int32)a1 = tf.assign(y, y + 1)a2 = tf.assign(y, y * 2)with tf.control_dependencies([a1, a2]):    t = y+0with tf.Session() as sess:    sess.run(tf.global_variables_initializer())    for i in range(4):        print('t=%d' % sess.run(t))        print('y=%d' % sess.run(y))

预期的输出是

t=6y=6t=14y=14t=30y=30t=62y=62

但第一次运行时,我得到的是:

t=6y=6t=13y=13t=26y=26t=27y=27

第二次运行时,我得到的是:

t=3y=3t=6y=6t=14y=14t=15y=15

第三次运行时,我得到的是:

t=6y=6t=14y=14t=28y=28t=56y=56

非常荒谬,多次运行产生了多种不同的输出序列,非常奇怪,有人能帮忙吗?

编辑:改为

import tensorflow as tfimport osy = tf.Variable(2, dtype=tf.int32)a1 = tf.assign(y, y + 1)a2 = tf.assign(y, y * 2)a3 = tf.group(a1, a2)with tf.control_dependencies([a3]):    t = tf.identity(y+0)with tf.Session() as sess:    sess.run(tf.global_variables_initializer())    for i in range(4):        print('t=%d' % sess.run(t))        print('y=%d' % sess.run(y))

…仍然无法正常工作。

奇怪的是这段代码:

a1 = tf.assign(y, y + 1)with tf.control_dependencies([a1]):  a2 = tf.assign(y, y * 2)  with tf.control_dependencies([a2]):    t = tf.identity(y)

…可以正常工作,但如果简单地将a2移到前面,如下所示:

a1 = tf.assign(y, y + 1)a2 = tf.assign(y, y * 2)with tf.control_dependencies([a1]):  with tf.control_dependencies([a2]):    t = tf.identity(y)

…就无法正常工作了。


回答:

你的方法的问题在于a1a2的顺序也很重要:你希望a1a2之前被评估。tf.control_dependencies([a1, a2])保证ta1a2之后执行,但它们本身可以以任意顺序被评估。

我建议使用明确的依赖关系,如下所示:

y = tf.Variable(2, dtype=tf.int32)a1 = tf.assign(y, y + 1)with tf.control_dependencies([a1]):  a2 = tf.assign(y, y * 2)  with tf.control_dependencies([a2]):    t = tf.identity(y)with tf.Session() as sess:  sess.run(tf.global_variables_initializer())  for i in range(4):    print('t=%d' % sess.run(t))    print('y=%d' % sess.run(y))

输出:

t=6y=6t=14y=14t=30y=30t=62y=62

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注