我想在动态维度(批量大小)上动态地广播张量的乘法。我可以对批量大小进行硬编码,但是批量大小等于1的推断是不可能的。
img_placeholder = tf.placeholder(tf.float32, (None, 28, 28, 1), name='real_img')
random_part = tf.placeholder(tf.float32, (None), name='random_part')
在训练期间,我将为每个占位符提供与第一维相同的大小。我希望result = random_part * img_placeholder
result[0] = random_part[0] * img_placeholder[0]
。
目前只是将结尾乘以尺寸为BATCH_SIZE, 28, 28, BATCH_SIZE
的张量。
如果广播不能按照我的意愿工作(因为有动态尺寸),是否有可能以其他方式进行广告?
答案 0 :(得分:2)
TensorFlow使用与numpy相同的广播规则,因此在您的示例中,形状(20)首先在左侧上扩展,单个维度变为(1,1,1,20),然后是单身尺寸在两侧匹配以具有形状(20,3,3,20)。
如果您希望将(20)视为批量维度,则应将其重新整形为具有相同的等级
>>> a=np.ones((5,))
>>> b=np.ones((5,28,28,1))
>>> (a*b).shape
(5, 28, 28, 5)
>>> b.shape
(5, 28, 28, 1)
>>> a.shape
(5,)
>>> a2 = np.reshape(a, [len(a), 1, 1, 1])
>>> a2.shape
(5, 1, 1, 1)
>>> (a2*b).shape
(5, 28, 28, 1)