我有一个tensor1
,形状为[1 128, 128 , 100]
,我还有一个tensor2
,形状为[1,128,128,1]
。
如果我尝试在最后一个维度上减去tensor1 - tensor2
,tensor2
会自动广播到[1,128,128,100]
并进行减法吗?否则只会减去tensor1
的第一层??
谢谢!!!!!!
答案 0 :(得分:1)
是的,它将被广播。张量流中最广的rules与numpy相同:
在两个数组上操作时,NumPy逐元素比较它们的形状。它从尾随尺寸开始,一直向前发展。何时兼容两个维度
它们相等,或者
其中一个是1
例如:
import tensorflow as tf
v1 = tf.Variable(2*tf.ones([1, 2, 2, 3]))
v2 = tf.Variable(tf.ones([1, 2, 2, 1]))
diff = v1 - v2
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(diff.eval()) # <-- `diff` contains only 'ones' because of broadcasting
# [[[[1. 1. 1.]
# [1. 1. 1.]]
#
# [[1. 1. 1.]
# [1. 1. 1.]]]]
print(diff.get_shape().as_list()) # [1, 2, 2, 3] <-- same shape as `v1`
在您的情况下,第二张量的尾随尺寸为1,根据规则,该尺寸可以广播。其余尺寸相等。