Tensorflow 2.0 `tf.multiply` 方法给出了意想不到的结果
Tensorflow 2.0 `tf.multiply` method gives unexpected results
我对这个操作的输出形状有点困惑
>>> eps = tf.random.uniform((3))
>>> images = tf.random.normal((3, 28, 28, 1))
>>> output = eps * images
>>> output.get_shape()
(3, 28, 28, 3)
我希望将 eps
中的每个标量与图像中每个形状 (28, 28, 1)
的图像相乘,以获得输出形状 (3, 28, 28, 1)
像这样
>>> output = []
>>> output.append(eps[0] * images[0])
>>> output.append(eps[1] * images[1])
>>> output.append(eps[2] * images[2])
>>> output = tf.convert_to_tensor(output)
>>> output.get_shape()
(3, 28, 28, 1)
请帮忙
这是由于 broadcasting(link 来自 NumPy 文档,但它在 TensorFlow 中的工作方式相同)。如果要将 eps
的单一维度“匹配”到 images
的第一个维度,则需要向 eps
添加额外的单一维度,以便广播按预期工作:
eps = tf.random.uniform((3))
# Add dimensions for broadcasting
eps = tf.reshape(eps, [-1, 1, 1, 1])
output = eps * images
print(output.get_shape())
# (3, 28, 28, 1)
或者,您可以直接创建具有该形状的 eps
:
eps = tf.random.uniform((3, 1, 1, 1))
我对这个操作的输出形状有点困惑
>>> eps = tf.random.uniform((3))
>>> images = tf.random.normal((3, 28, 28, 1))
>>> output = eps * images
>>> output.get_shape()
(3, 28, 28, 3)
我希望将 eps
中的每个标量与图像中每个形状 (28, 28, 1)
的图像相乘,以获得输出形状 (3, 28, 28, 1)
像这样
>>> output = []
>>> output.append(eps[0] * images[0])
>>> output.append(eps[1] * images[1])
>>> output.append(eps[2] * images[2])
>>> output = tf.convert_to_tensor(output)
>>> output.get_shape()
(3, 28, 28, 1)
请帮忙
这是由于 broadcasting(link 来自 NumPy 文档,但它在 TensorFlow 中的工作方式相同)。如果要将 eps
的单一维度“匹配”到 images
的第一个维度,则需要向 eps
添加额外的单一维度,以便广播按预期工作:
eps = tf.random.uniform((3))
# Add dimensions for broadcasting
eps = tf.reshape(eps, [-1, 1, 1, 1])
output = eps * images
print(output.get_shape())
# (3, 28, 28, 1)
或者,您可以直接创建具有该形状的 eps
:
eps = tf.random.uniform((3, 1, 1, 1))