我正在尝试实现层之间的部分连接。比方说,我只想使用一些特征图,例如第一个和第三个。
- 为此目的使用 tf.gather() 是否正确?
- 我可以只使用索引运算符 [ ] 而不是下面的 tf.gather() 吗?
- 收集索引在反向传播方面是否有效?我很难想象 Tensorflow 如何在内部反向传播过程中知道连接来自第一个和第三个(信息是硬编码的)。 tf.gather 函数会记住连接吗?
代码:
# let say, L1 is layer1 output of shape [batch_size x image_size x image_size x depth1]
partL1 = L1[:, :, :, [0,2]]
# W2 is a tf variable of shape [5, 5, 2, depth2]
conv2 = tf.nn.conv2d(partL1, W2)
请您参考如下方法:
是的,不,是的。 :-) (a) 是的,您可以按照您的建议使用 gather 来选择一个层的子集以传播到下一层。
(b) 不,很遗憾,您不能使用索引运算符。您需要显式调用 tf.gather()。
(c) 是的,TensorFlow 会存储一份用于收集的索引副本,并将它们保存起来用于反向传播。可以看到the implementation of Gather's Gradient如果您对如何进行好奇 - 它会查看操作的输入并使用这些进行传播。
