tensorflow - 动态广播

标签 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_part * img_placeholder 这样 result[0] = random_part[0] * img_placeholder[0]

目前只是将两端与大小为 BATCH_SIZE, 28, 28, BATCH_SIZE 的张量相乘。

如果广播无法按照我的意愿工作(因为存在动态尺寸大小),是否有可能以其他方式实现?

最佳答案

TensorFlow 使用与 numpy 相同的广播规则,因此在示例中,形状 (20) 首先在左侧扩展,单例尺寸变为 (1, 1, 1, 20),然后单例尺寸两侧匹配,形成形状 (20, 3, 3, 20)。

如果您希望将 (20) 视为批处理维度,则应将其 reshape 为具有相同的排名

>>> 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)

关于tensorflow - 动态广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45494642/

相关文章:

python - keras 'NoneType' 对象没有属性 '_inbound_nodes'

python - 我正在创建一个 AI 聊天机器人,它反复显示错误 : Expected Bytes, 描述符找到

class - 具有不平衡类的 Tensorflow Resnet

python - Tensorflow 无法为形状为 'x:0' 的张量 '(?, 128)' 提供 shape(1,) 的值

tensorflow - 反向传播和反向模式自动微分有什么区别?

tensorflow - TensorFlow 中的基本神经网络

java - 深度学习4j : update a saved model

tensorflow - 在深度学习中的卷积网络中使用多个相同的滤波器有什么好处

python - TensorFlow 模型拟合和 train_on_batch 之间的区别

python - 在 Tensorflow 中查找子矩阵的秩