Tensorflow:tf.nn.separable_conv2d做什么?

Fei*_*Fei 11 tensorflow

我不太确定tf.nn.separable_conv2d到底是做什么的.似乎pointwise_filter是生成下一层的一个像素时不同特征的缩放因子.但我不确定我的解释是否正确.这种方法有没有参考,有什么好处?

tf.nn.separable_conv2d生成与tf.nn.conv2d相同的形状.我想我可以用tf.nn.separable_conv2d替换tf.nn.conv2d.但是使用tf.nn.separable_conv2d时的结果似乎非常糟糕.网络很早就停止了学习.对于MNIST数据集,精度只是随机猜测~10%.

我想当我将pointwise_filter值设置为全1.0并使其无法训练时,我会得到与tf.nn.conv2d相同的东西.但不是真的......仍然有~10%的准确性.

但是当tf.nn.conv2d与相同的超参数一起使用时,精度可以达到99%.为什么?

此外,它需要channel_multiplier*in_channels <out_channels.为什么?channel_multiplier的作用是什么?

谢谢.

编辑:

之前我使用channel_multiplier作为1.0.也许这是一个糟糕的选择.将其更改为2.0后,精度会变得更好.但是channel_multiplier的作用是什么?为什么1.0不是一个好的价值?

Vin*_*cke 28

tf.nn.separable_conv2d()实现所谓的"可分离卷积",在本演讲的第26页和之后描述.

我们的想法是,不是在图像的所有通道上共同卷积,而是在每个通道上运行单独的2D卷积,其深度为channel_multiplier.的in_channels * channel_multiplier中间通道得到串接在一起,并映射到out_channels使用1x1卷积.

它通常是降低预测卷中早期卷积的参数复杂度的有效方法,并且可以大大加快训练速度.channel_multiplier控制这种复杂性,RGB输入通常为4到8.对于灰度输入,使用它没有多大意义.

  • Vincent,对于灰度图像,我同意将它用于第一个卷积层是没有意义的.但是对于其他层,如果它们的输入量大于1,那么它是否有意义.是吗? (5认同)