Tensorflow 动态广播

Tensorflow 动态广播,tensorflow,deep-learning,Tensorflow,Deep Learning,我想动态播放张量沿动态维度的乘积,即批量大小。我可以硬编码批量大小,但不可能推断批量大小等于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\u pa

我想动态播放张量沿动态维度的乘积,即批量大小。我可以硬编码批量大小,但不可能推断批量大小等于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\u part*img\u占位符
,这样
result[0]=random\u part[0]*img\u占位符[0]

目前,只需使用大小为28、28、28、BATCH\u size的张量乘以端点即可


如果广播不能如我所愿工作(因为存在动态维度大小),是否有可能以其他方式进行广播?

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)

但是,批量大小等于1的推断是不可能的?你能解释一下吗?不可能用不相容形状的张量来填充图。如果网络是为每批64个图像的培训而明确构建的,那么您不能向其中输入一个图像的批。您可能更喜欢构建一个具有两个占位符的健壮原型,用于培训和推理。在构建用于推理的图形时,请重用用于训练的变量。不清楚您是要为多个gpu还是单个gpu进行广播…(20)*(20,3,3,1)=(20,3,3,1)在发布问题后,我检查了我的想法,我的想法甚至在NumPy中也不起作用,因此我对其进行了重塑。谢谢