tensorflow "tf.print()"破坏了OrderedDict中的Tensor值顺序,

mutmk8jj  于 5个月前  发布在  其他
关注(0)|答案(7)|浏览(60)

系统信息

  • 操作系统平台和发行版: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,这个问题可以完全重现。

xv8emn3q

xv8emn3q1#

我能够在colab中使用2.6.0复现这个问题。请在这里找到gist。

b4wnujal

b4wnujal2#

@RuofanKong,
我找到了这份文档,其中指出
Python集合内的Tensor将无法正确显示/格式化其值,当tf.print内核运行时。
你能看一下吗?谢谢!

hpxqektj

hpxqektj3#

感谢您@sanatmpa1的评论。我刚刚查看了您分享的文档,以下是从用户的Angular 反馈的内容。

  1. 文档中提到的注意事项对于用户来说至关重要,但我并没有看到它被包含在TensorFlow官方公共文档中( https://www.tensorflow.org/api_docs/python/tf/print )
  2. 无论如何,根据我作为用户的经验,让结构Tensor与tf.print()一起工作是非常常见的用例,不支持它是对我来说不合理的。此外,这里的官方文档有一个例子,说明它应该与嵌入在Python字典中的Tensor一起工作。请参阅此处(https://www.tensorflow.org/api_docs/python/tf/print#example)
    希望这对您有帮助。
lf5gs5x2

lf5gs5x24#

感谢您的澄清。我在这里找到了一个类似的issue,它也讨论了类似的问题。

b0zn9rqh

b0zn9rqh5#

这个问题已经被自动标记为过时,因为它没有最近的活动。如果没有进一步的活动发生,它将被关闭。谢谢。

t2a7ltrp

t2a7ltrp6#

它有任何更新吗?

lo8azlld

lo8azlld7#

你好,@RuofanKong@sachinprasadhs!
我可以在2.11版本中复制这个问题。附上gist供参考。
谢谢!

相关问题