我不太确定tf.nn.separable_conv2d到底做什么。似乎pointwise_filter是生成下一层的一个像素时不同要素的缩放比例。但是我不确定我的解释是否正确。这种方法有什么参考吗?有什么好处?
tf.nn.separable_conv2d生成与tf.nn.conv2d相同的形状。我假设我可以将tf.nn.conv2d替换为tf.nn.separable_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不是一个好值?
tf.nn.separable_conv2d()
实现了幻灯片26及其后续内容中所述的所谓的“可分卷积” 。
这个想法是,您无需在图像的所有通道上共同进行卷积,而可以在每个通道上以的深度运行单独的2D卷积channel_multiplier
。的in_channels * channel_multiplier
中间通道得到串接在一起,并映射到out_channels
使用1x1卷积。
这通常是减少卷积网络中早期卷积参数复杂性的有效方法,并且可以从实质上加快训练速度。channel_multiplier
控制该复杂度,对于RGB输入,通常为4到8。对于灰度输入,使用它几乎没有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句