非常奇怪的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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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