1、卷积
这幅图是对一个5*5的矩阵A进行3*3的矩阵B的卷积,那么就从最上角到右下角,生成卷积之后的矩阵的大小是(5-3+1)*(5-3+1)的矩阵,生成之后的矩阵的元素值,是之前的两个矩阵对应元素的乘积之和,这个在matlab中有现成的命令,但是用之前需要注意下,比如在图中这样的B的话要首先进行B中元素左右和上下的对调才可以满足右侧矩阵的结果。这个是matlab中进行卷积计算的命令要求的,并且这个命令还有第三个参数,如图中使用的是valid参数值,具体的用法还请doc来了解吧。
2、池化
比如上方左侧矩阵A是20*20的矩阵要进行大小为10*10的池化,那么左侧图中的红色就是10*10的大小,对应到右侧的矩阵,右侧每个元素的值,是左侧红色矩阵每个元素的值得和再除以红色矩阵的元素个数,也就是平均值形式的池化。
3、上面说了下卷积和池化,再说下计算中需要注意到的。在代码中使用的是彩色图,彩色图有3个通道,那么对于每一个通道来说要单独进行卷积和池化,有一个地方尤其是进行卷积的时候要注意到,隐藏层的每一个值是对应到一幅图的3个通道穿起来的,所以分3个通道进行卷积之后要加起来,正好才能对应到一个隐藏层的神经元上,也就是一个feature上去。
ps:在做这个实验的过程中,遇到了个2B的问题。我的代码中对convolution和pooling的check都过去了,但是准确率只有25%,反正中间使用了很多方法来找我的错误,最后都没找到,最终和同学的代码对比,一个文件一个文件的替换来跑(为了快速找到问题,把数据规模以及隐藏层的个数都调小了的),最终发现是池化的时候的问题,我把问题原因贴在这里,在池化的过程中,代码应该是这样子的:
而我写成了(注意红色部分)
但是这个代码被check过了没问题,我去看了下check的代码,这个代码是给出的:
也就是这个测试矩阵的features为1,numImages也是1,所以在我的代码中这个问题正好被隐藏掉了,导致我的check是显示congratulations的,因为也导致我就压根没想到是这个地方错误的。。
reshape是一种函数,函数可以重新调整矩阵的行数、列数、维数。在matlab命令窗口中键入doc reshape或help reshape即可获得该函数的帮助信息。
A =
1 4 7 10
2 5 8 11
3 6 9 12
B = reshape(A,2,6)
B =
1 3 5 7 9 11
2 4 6 8 10 12
B = reshape(A,2,[])
B =
1 3 5 7 9 11
2 4 6 8 10 12
原文链接:http://blog.csdn.net/errors_in_life/article/details/65950699