神经网络和卷积神经网络的理解与工作(早):
http://wenku.baidu.com/view/9ae538a14028915f814dc246.html
神经网络推导月卷积神经网络推理
http://wenku.baidu.com/view/4550a0b94b73f242336c5fbb.html
毕设ppt,有几个关于bp的图,感觉不错
http://wenku.baidu.com/view/1cc957badd36a32d72758117.html
我对CNN matlab 代码的详细解析:
http://wenku.baidu.com/view/65344686102de2bd9605886e.html
or http://pan.baidu.com/s/1sjJjftz
在网上看过一些博客,和一些论文,尝试着自己去实现CNN。
我的CNN效果:
http://pan.baidu.com/s/1jGvGGBk 或http://v.youku.com/v_show/id_XODM4NzcyMzg0.html,(视频U酷转码后就看不太清了)
我的CNN代码(开发环境为:visual studio 2010):
mlp单层(6w图库训练):http://pan.baidu.com/s/1o6Fl1LS
mlp单层(6k实图训练):http://pan.baidu.com/s/1mgqSYVI
mlp双层:http://pan.baidu.com/s/1sj9F7dF
图库:
http://pan.baidu.com/s/1pJsOMqn 6W+1W=7万张
图片文件图库:
http://pan.baidu.com/s/1c0yAQ68 大约10*1000=约1w张(并不是每个数字严格1000张)
我的CNN结构(mlp单层):
把所有神经元的输出显示出来效果如下: (代码:http://pan.baidu.com/s/1bnEXUfP)
训练结果:
sigmoid函数作为尾部整形函数:
6000张图片训练100次,自洽检验准确率99.8%
2000张图片测试,准确率:98.4%
我用6w张图片训练100次,用另1w张图片测试,
尾部整形函数用sigmoid:
训练准确率为99.51%,测试准确率为98.80%,在两层卷积与sfm1误差传播过程中采用了多线程,训练时间约2小时。
尾部整形函数用softmax:
训练准确率为99.9281%,测试准确率为98.64%,
训练好的网络参数:http://pan.baidu.com/s/1kTMdkwv
6w的数据集中数字有歪的数字、有噪点的数字。
发现很多博客会大体介绍CNN的思想,但往往对实现细节理解不够准确或者语焉不详,论文不会详细介绍CNN的实现过程。
后来我查看了cnn matlab代码DeepLearnToolbox-master,发现了自己理解的很多错误。
我在写CNN上走过很多弯路,要特别注意:
1 每个卷积层featureMap只有一个bias,一个featureMap有若干个输入map,和每个输入map的连接对应一个filter。
2 卷积层误差传播可以通过误差播撒的方式来完成,它和旋转180度的卷积核对误差map做卷积得到的结果是一样的。
因为featureMap间的连接权重是以卷积核的形式表现的,卷积核可以被认为是某种均化后的权重。
3 怎么来理解共享权值?
一个featureMap在进行卷积的过程中会被切割出很多filterSize大小的图块,每个图块和卷积层的featureMap中的某个神经元连接,连接的权重就是卷积核。一个featuremap切割出来的所有的图块共享权值共享的是卷积核。
4 如何来更新卷积核?以及计算卷积层上一层的误差?
这里借用了神经网络的训练思想:我们把一个featureMap的卷积过程看作是一个filterSize*1大小的神经网络,用不同的图块反复训练的过程。
5 mlp采用双层抖动很厉害,训练效果不好,不收敛。mlp采用单层就好多了。
7 卷积过程可以采用多线程加速,第一层子采样的求误差delta的过程也适合采用多线程加速。
以下三次卷积过程是CNN中极为重要的。
8 卷积核的数量与输入、输出featuremap数有啥关系?
图库:http://pan.baidu.com/s/1pJsOMqn 6W+1W=7万张文件解析:
训练特征文件解析,从第一个pixel value开始,没784个像素点表示一张图片,784个像素值是28*28的图像按列展开得到的。
训练用的标签文件解析:
斯坦福大学的几个CNN的例子,超帅!