tensorflow - 用于特征缩减的 Conv 1x1 配置

标签 tensorflow machine-learning deep-learning pytorch conv-neural-network

我在深度网络中使用 1x1 卷积来减少特征 x:Bx2CxHxWBxCxHxW。我有三个选择:

  1. x -> Conv (1x1) -> Batchnorm-->ReLU。代码将为output = ReLU(BN(Conv(x)))。引用resnet
  2. x -> BN -> ReLU-> 转换。因此代码将是 output = Conv(ReLU(BN(x))) 。引用densenet
  3. x-> 转化次数代码为output = Conv(x)

哪一个最常用于特征缩减?为什么?

最佳答案

由于您要端到端地训练网络,因此无论您使用什么配置 - 权重都会经过训练以适应它们。

BatchNorm?
我想您需要问自己的第一个问题是您想使用 BatchNorm 吗?如果你的网很深并且你关心covariate shifts那么你可能应该有一个 BatchNorm - 这里是选项 no。 3

首先进行 BatchNorm?
如果您的x是另一个conv层的输出,那么您的第一个和第二个选择之间实际上没有区别:您的网络是...-的级联conv-bn-ReLU-conv-BN-ReLU -conv-...所以它只是将网络“人工”划分为函数convbnrelu的三元组 直到第一个和最后一个函数,您都可以按照自己的意愿进行拆分。此外,由于 Batchnorm 是一种线性运算(缩放 + 偏差),因此可以将其“折叠”到相邻的 conv 层中,而无需更改网络,因此基本上只剩下 conv 了。 -relu 对。
因此,您突出显示的前两个选项之间并没有太大区别。

还有什么要考虑的?
更改特征维度时真的需要 ReLU 吗?您可以将降维视为线性映射 - 将x映射的权重分解为一个较低的矩阵,最终映射到c 维空间而不是 2c 空间。如果您考虑线性映射,那么您可能会完全省略 ReLU
请参阅fast RCNN SVD trick举个例子。

关于tensorflow - 用于特征缩减的 Conv 1x1 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53919836/

相关文章:

python - Tensorflow 中 tf.contrib 模块的用途是什么?

r - h2o 深水模型训练失败

image-processing - 当有很多类时如何使用神经网络

tensorflow - 如何在 TensorFlow 中使用可微傅立叶变换?

python - 值错误 : operands could not be broadcast together with shapes in Naive bayes classifier

python - tflearn 创建多个模型

machine-learning - 交叉验证是分层的一种吗?

python - 属性错误 : 'tuple' object has no attribute 'log_softmax'

python - 如何保存 undefined variable 的 tensorflow 模型(省略标签张量)

machine-learning - Caffe 或卷积网络中的批量大小是多少