系统信息
- 操作系统平台和发行版:macOS Big Sur 11.6
- 从哪里安装的TensorFlow(源代码或二进制文件):二进制文件
- TensorFlow版本:问题出现在TF v1.15.2和TF v2.7中。
- Python版本:带有TF v1.15.2的Python 3.6.5,或带有TF v2.7的Python 3.8.3
问题描述和复现代码
我正在使用tf.print()
记录从包含字符串Tensor对的OrderedDict中计算出的中间值,但评估结果显示Tensor的顺序被打乱了。以下python脚本try_tf_print.py
是一个示例。
from collections import OrderedDict
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
def build_tf_print_ops_with_dict() -> None:
a = tf.compat.v1.placeholder(dtype=tf.float32, shape=[None, 1])
b = tf.compat.v1.placeholder(dtype=tf.float32, shape=[None, 3])
c = tf.compat.v1.placeholder(dtype=tf.float32, shape=[None, 2])
d = tf.compat.v1.placeholder(dtype=tf.float32, shape=[None, 5])
p_dict = OrderedDict([
("foo", a),
("bar", b),
("baz", c),
("qux", d)
])
tf_print_ops = tf.print(p_dict)
sess = tf.compat.v1.Session()
sess.run(tf_print_ops, feed_dict={
a: [[1]],
b: [[2, 4, 6]],
c: [[0.2, 0.2]],
d: [[100, 200, 300, 400, 500]]
})
build_tf_print_ops_with_dict()
我希望tf.print()的评估结果是OrderedDict([('foo', [[1]]), ('bar', [[2 4 6]]), ('baz', [[0.2 0.2]]), ('qux', [[100 200 300 400 500]])])
,但我得到的是OrderedDict([('foo', [[2 4 6]]), ('bar', [[0.2 0.2]]), ('baz', [[1]]), ('qux', [[100 200 300 400 500]])])
,其中Tensor值的顺序被打乱了--它应该遵循OrderedDict的顺序("foo", a), ("bar", b), ("baz", c), ("qux", d)
,但它得到的顺序是("foo", b), ("bar", c), ("baz": a), ("qux", d)
。通过运行上面的脚本try_tf_print.py
,这个问题可以完全重现。
7条答案
按热度按时间xv8emn3q1#
我能够在colab中使用
2.6.0
复现这个问题。请在这里找到gist。b4wnujal2#
@RuofanKong,
我找到了这份文档,其中指出
Python集合内的Tensor将无法正确显示/格式化其值,当tf.print内核运行时。
你能看一下吗?谢谢!
hpxqektj3#
感谢您@sanatmpa1的评论。我刚刚查看了您分享的文档,以下是从用户的Angular 反馈的内容。
tf.print()
一起工作是非常常见的用例,不支持它是对我来说不合理的。此外,这里的官方文档有一个例子,说明它应该与嵌入在Python字典中的Tensor一起工作。请参阅此处(https://www.tensorflow.org/api_docs/python/tf/print#example)希望这对您有帮助。
lf5gs5x24#
感谢您的澄清。我在这里找到了一个类似的issue,它也讨论了类似的问题。
b0zn9rqh5#
这个问题已经被自动标记为过时,因为它没有最近的活动。如果没有进一步的活动发生,它将被关闭。谢谢。
t2a7ltrp6#
它有任何更新吗?
lo8azlld7#
你好,@RuofanKong@sachinprasadhs!
我可以在2.11版本中复制这个问题。附上gist供参考。
谢谢!