【UFLDL-exercise9-Convolution and Pooling】

做完了CNN的练习,思想是:

在面对比较大的图像时(64*64),如果直接列向量化,维数太高,sparse autoencoder的计算过繁;因此采用的策略是:先从训练集中随机地下采样众多(8*8)的patch,然后学习8*8图像的W矩阵(隐层有400个单元,学习到的矩阵W是400*64的,但是这里视作有400个w矩阵,也就是每个隐层的unit对应一个8*8的矩阵,这样子做是为了便于后面的卷积计算),然后分别用每一个w矩阵去提取(extract)整幅64*64图像的feature activations,而我们只要将w矩阵上下左右都翻转(flip)一下,这个feature extract的过程就和数学中的卷积一样了(相当于整幅64*64的图像与flip后的w做二维卷积),这大概就是CNN的来由吧。

然后,extract出的feature矩阵维数还是太大了,所以可以再用一下pooling,这样维数进一步降低了,得到的feature矩阵再列向量化,当做input送进softmax regression去训练分类器了,最后训练好的分类器去test的时候,test data也要来一遍covolution and pooling以得到对应于输入端的特征。

最后test Accuracy: 80.406% 感觉并不太好,可能是整个的特征提取过程信息损失比较多吧,insight层面上也不太好理解,尤其是pooling过程

代码在此

你可能感兴趣的:(cnn)