我有一个卷积层,它产生16个输出要素图,我想拍摄这些地图并将它们转换成4个这样的地图:
或者,我可以先用掩码将所有16个地图相乘,然后将结果分成4组,对每个组进行reduce_sum。生成的4个映射将用作下一个卷积或池化层的输入。
Tensorflow是否能够自动计算tf.split,tf.multiply和tf.reduce_sum这种组合的渐变?
编辑:这是一系列操作,其中conv
是tf.layers.conv2d
的输出,而mask
是一个与conv
形状相同的二进制numpy数组(完整代码是here):
conv_masked = mask * conv
conv_grouped = tf.reshape(conv_masked, (batch_size, num_groups, fs*fs, dim, dim))
out = tf.reduce_sum(conv_grouped, axis=2)
答案 0 :(得分:1)
所有张量流操作都已实现渐变公式。只要你的所有操作都是tf.operation,你就可以了。
另外,正如您所见,here,tensorflow会重载基本操作。
fix
如果涉及的元素是张量,那么上面的两个表达式是等价的。
用于面具的类型
masked_tensor = tensor * mask
masked_tensor = tf.multiply(tensor, mask)
对我来说,使用python 3.6.3和tensorflow 1.3.0都会从操作中生成相同的结果。但我在文档中没有发现任何明确表示np.arrays总是被接受的内容,所以我会避免它。
但有一点需要注意的是,你所乘的面具应该是一个不可训练的变量。否则优化器将改变你的掩码。