我不太确定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.对于灰度输入,使用它没有多大意义.
归档时间: |
|
查看次数: |
9466 次 |
最近记录: |