卷积神经网络(CNN)学习笔记

喜你入骨 提交于 2020-02-07 00:42:34

为什么需要卷积神经网络?
全连接神经网络主要存在参数过多不便处理高维数据这两大问题,卷积神经网络是通过参数共享(卷积核共享),池化降维来解决上述两个问题。
在这里插入图片描述在这里插入图片描述
这个公式很重要,特征图经过卷积之后会是什么维度的数据,全靠它。
在这里插入图片描述
最大池化对于纹理特征敏感,均值池化对背景特征敏感。
卷积函数代码跟踪视频理解:
针对不同的输入图片使用不同的卷积核进行卷积并演示其进行卷积后的输出是什么形状,从而把卷积输出公式落实到代码。
池化函数演示跟踪其实也类似,最关键的其实是对tf.reshape(tf.transpose(img), [-1, 16]) 这行代码的理解花费了我一些时间查找其相关API的用法。
另外特别要说明的一点是矩阵数据在TensorFlow中存储和我们正常思维是有区别的如下图所示:
在这里插入图片描述
正常思维我们会认为[[1,5],[1,5]]是个特征图,但其实[[1,1],[3,3]]才是特征图,而前面有多少[[[[就表示他是多少维度的数据,如图就是个四维数据。
Cifar图片集分类示例视频
Cifar图片集分类代码的逻辑其实和Mnist多层分类的逻辑是一样的还是哪四步,准备数据,搭建模型,训练模型,使用模型,代码其实就是把卷积函数和池化函数加到了搭建模型中,把原来的全连接层改成了卷积层,学到此处我突然明白WX+B这个公式为什是深度学习中的通用公式了。
看懂这些代码花了我半天的时间,虽然有视频的讲解但是以下这两处代码花了我很多时间:
#将LABEL值改成one hot编码
label_b = np.eye(10,dtype=float)[label_batch] #one hot
#启动队列,通过多线程将读取数据与计算数据分开,也就是一边从硬盘读取数据,一边进行训练计算,提升效率
tf.train.start_queue_runners(sess=sess)
这两处代码主要是查API的用法花了时间,就是多线程的用法为什是要传SESS呢,又是怎样将读数据和训练相分开的呢?这些又是如何反映在代码上的呢,np.eye又是如何把label_batch转成one hot格式。
在这里插入图片描述
卷积神经网络这一章节中就是这张PPT信息量最大,最有技术含量,我反复听了这段N次,还查了视频中给出的相关链接,才搞懂为什么输出分布为什么会变化。每一层数据都是通过W这样的神经元权重进行输出,每次第一层输入图片初始化带来的改变肯定不一样呀多层下来肯定变化很大,而批归一化,就是将每一批次在每层的输出上归一化至:均值0、方差为1,这样就解决了输出分布经过多层剧烈变化的现象。
具体批归一化是如何做到此事的我推荐大家阅读:
https://blog.csdn.net/leneey/article/details/80075356
https://www.cnblogs.com/dyl222/p/12197187.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!