我了解到可以通过修改来自 protobuf 的 JSON 来对 TensorFlow 进行编程。请参阅here
如果我修改此 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
的长度内不会保存任何静态形状信息。您甚至可以拥有未知等级的张量。
重新计算静态形状是一个诱人的想法,但目前不支持这一点,因为图构造可能依赖于静态形状信息。例如:
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.shape
与 cond
一起使用会更好),但它确实发生了。不幸的是,这种静态形状条件图结构并未在元图中捕获。
关于json - TensorFlow 形状和类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096358/