tensorflow 创建 tensor 的时候,可以用 scalar 的 tf.Tensor 指定形状,有点类似于 pytorch 的动态特性?
这在处理形状涉及 batch 那维的具体大小的时候(通常在 placeholder 中设为 None)有用,如 tensorflow实现kNN contrastive loss 中的 knn mask 就有类似用法。
例子如下:
Code
import tensorflow as tf
a = tf.placeholder("float32", [None]) # 长度未知
b = tf.placeholder("float32", [None]) # 长度未知
# 用 `tf.shape(x)[0]` 而不是 `x.shape[0]`
n = tf.shape(a)[0]
m = tf.shape(b)[0]
c = tf.zeros([n, m]) # 用动态长度指定形状
c_shape = tf.shape(c)
with tf.Session() as sess:
print(sess.run(c_shape,
feed_dict={a: [1, 2, 3],
b: [4, 5]}))
输出:
[3 2]
P.S.
我猜,pytorch 里能推迟到运行时才确定的形状信息,讲道理在 tensorflow 里估计也行?