cnn输入层_CNN中使用卷积层替代全连接层训练

在吴恩达的深度学习的卷积神经网络课程中,对于目标识别介绍了一种划窗方法,在该方法的实现中使用卷积层替代最后的全连接(FC)层

例如,在常规的CNN中,最后的部分是FC层,由于其参数与输入数据的大小(H和W)有关,所以训练好了之后就只能预测28x28的规模的图片,如下图这样:

08ecb79053c350472a1a4ff80c2899f2.png
28x28

但是有时候碰到其他规模的图片的话就没办法了,比如下面的这张:

c6b402b189965d2c729f483dbea8eb7b.png
60x60

我希望网络能够根据这张图片给出一组预测。如果是常规的CNN的话,可能需要将这个图片做一些预处理,比如截成若干个28x28的图片,可是有没有与方法能够直接丢给忘了而不需要预处理呢?

肯定是能的,首先,看看普通CNN的结构:

5c210e29694e6d56fc80576491498cf3.png

纯手工画的,略丑。上面只把各层输入数据的宽高体现出来了,通道数就只在下面做了标识,理解就好

可以看到,最后一层maxpooling层输出的是1X1大小120个通道的数据,后面就是FC层,接受120个数据作为输入,而且是固定的,所以当以后如果预测的图片大小变化时,最后一层的maxpooling层输出的就不会是1X1大小了,而FC层还是只接受120个数据作为输入

然后,再画一下用卷积层替换FC层的图片:

c7bd20871bc4d6ebe977dbfe0898d86f.png

前面都是一样的,主要变化就是在最后一层maxpooling之后:

eb9f56e6631e1da47f6472f12f7724d2.png

后面用了两个shape为:(120,120,1,1)的卷积核进行卷积,保持和上面的规模不变,最后在用一个(10,120,1,1)的卷积核进行卷积,输出1X1X10的数据,然后就可以丢给softmax进行分类了

这样一来,就算是以后的输入图片的规模变了,也不影响。例如,丢给这个网络一个36X36的图片,最后会输出一个4X4X10的结果,也就是相当于将这张36X36的图片以8的步长分成了4个28X28的图片,然后对这4个28X28的图片进行预测:

61a13e77d6ad53d012b1938fc8883681.png

如上图,大黑框是36X36,红、黄、蓝、绿各自是28X28的一部分,将这张36X36的图片丢进去,也就相当于对4个28X28的部分分别做预测,至于为什么每个部分相差为8,这是由网络中maxpooling层的大小和数量决定的,因为这个网络有3个2X2的maxpooling层,所以就是

经测试,使用卷积层替换FC之后,对于MNIST的训练集,仍能达到0.996的正确率,不过可惜的是,对于预测更大规模的图片,还是不够理想,因为一张图片里各个不同的地方都有数字,而8像素的步长不可避免会切到一些残破的数字,而由于MNIST的训练集都是纯色背景,所以并不能对这种有干扰背景的做很好的预测,但是这个问题主要是由于训练集的不足导致,悲剧的是我也没有其他训练集可以玩了,所以只能理论上推敲一下了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值