0.序
之前一直在使用caffe在进行深度学习的实验,我的上一篇深度学习文章就是用caffe来检测病斑,但是在使用的过程中发现caffe虽然在速度上要快很多,但是在数据准备上有些复杂,调整网络结构和参数上也比较麻烦。所以我开始尝试其他的框架,比如theano和keras,而我目前的实验内容是用深度学习对病斑进行分类,这次的文章是对实验的一小部分,主要是对卷积神经网络CNN中各层输出结果的分析。
1.keras简介
Keras是基于Theano的一个深度学习框架,它的设计参考了Torch,用Python语言编写,是一个高度模块化的神经网络库,支持GPU和CPU。使用文档在这:http://keras.io/,这个框架火起来已经有很长一段时间了,目前使用keras的人非常多,使用上的问题可以到github提issue:https://github.com/fchollet/keras
谈一下使用上的体会,keras是基于theano写的,theano的操作相对keras用更细节更底层一些,而keras等于是用theano做了一些网络层和操作上的集成。因为是使用Python写的,代码写起来也非常快,另外在官网上有非常详细的例子。需要注意的是,keras一直在更新,所以别人博客以前的代码可能会不适用了,因为会有接口上的变化。
2.网络模型
2.1 模型分析
我在这里直接采用的是cifar10中使用到的CNN卷积神经网络,该网络结构图如下图所示:
关于cifar10的一些研究结果,目前在这个网站上总结有许多方法(http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html),同时也有其他的一些数据集的研究结果。
在这个网络中,卷积层是对图像进行卷积,可以理解为对图像提取特征,其中滤波器的数量越多,找到合适特征的概率也会大一些,当然数量合适就可以,太大不仅仅效果没有提高,还会占用过多的内存。
另外pooling层是做池化操作,从信号处理的角度可以理解为对图像进行下采样,也就是过滤出更有用的特征。具体可以看下别人的博客(http://blog.csdn.net/danieljianfeng/article/details/42433475)。当然严格来说,在这里pooling层可以与上一层的卷积层一起,认为是整个网络的一层
2.2 网络模型代码