TensorFlow 形状和类型推断

TensorFlow Shape and Type Inference

我了解到我可以通过修改来自 protobuf 的 JSON 来对 TensorFlow 进行编程。参见

如果我修改此 JSON,有时我会遇到问题,我需要手动编辑 JSON 以传播各种输入和输出的正确形状。有没有办法让 TF 自动为我执行此操作,以便我可以通过占位符指定输入,然后自动传播形状和类型?

如果您知道要进行哪些类型的修改,则可以从占位符中删除该形状信息。不确定性会自动传播。例如:

import tensorflow as tf
placeholder = tf.placeholder(dtype=tf.float32, shape=[None])
derived = (placeholder / 3)[1:, None]
print(placeholder.get_shape(), derived.get_shape())

打印:

(TensorShape([Dimension(None)]), TensorShape([Dimension(None), Dimension(1)]))

因此placeholder的长度不会保存静态形状信息。您甚至可以拥有未知等级的张量。

Re-computing 静态形状是一个诱人的想法,但目前不支持,因为图形构造可能依赖于静态形状信息。例如:

placeholder = tf.placeholder(dtype=tf.float32, shape=[2])
if placeholder.get_shape()[0].value % 2 == 0:
    derived = placeholder
else:
    derived = tf.concat(0, [placeholder, [0]])

这不是推荐的图形构建技术(将 tf.shapecond 结合使用要好得多),但它确实发生了。不幸的是,这种 static-shape-conditional 图结构没有在 meta-graph 中捕获。