构造一个网络首先要保证数据流是通的,即各层的输出形状的是整数,不能是小数。至于构造出来的网络效果好不好,按下不表。只要数据流通畅,你的输入图像是什么形状的都无所谓了。
如果你的图像是边长为 256 的正方形。那么卷积层的输出就满足 [ (256 - kernel_size)/ stride ] + 1 ,这个数值得是整数才行,否则没有物理意义。例如,你算得一个边长为 7.7 的 feature map 是没有物理意义的。 pooling 层同理可得。FC 层的输出形状总是满足整数,其唯一的要求就是整个训练过程中 FC 层的输入得是定长的。
resize
如果你的图像不是正方形。在制作 leveldb / lmdb 数据库时,缩放到统一大小(非正方形),使用非正方形的 kernel_size 来使得卷积层的输出依然是整数。
总之,撇开网络的好坏不谈,其本质上就是在做算术应用题:如何使得各层的输出是整数。
---------------未完待续