导语
关于卷积神经网络理论的学习,可以看:
卷积神经网络
。
本节学习来源斯坦福大学cs20课程,有关本节源代码已同步只至github,欢迎大家star与转发,收藏!
直通车:
https://github.com/Light-City/Translating_documents
TensorFlow中的卷积
在TensorFlow中去做卷积,我们有很多内建的层可以使用。你可以输入2维数据做1维卷积,输入3维数据做2维卷积,输入4维数据做3维卷积,最常用的是2维卷积。
作一个有趣的练习:在上面GitHub中的kernes.py文件中看到一些著名的核的值,在07_run_kernels.py中看到它们的用法。
用CNN处理MNIST
在第三课中学习了逻辑回归处理MNIST,现在我们使用CNN来处理,看看结果如何!
将采用如下架构:两个步长为1的卷积层,每个卷积层后跟一个relu激活层与最大池化层Maxpool,最后跟两个全连接层。
1.卷积层
输入尺寸(W)
过滤器尺寸(F)
步长(S)
零填充(P)
在定义函数之前,让我们看一下获取输出大小的公式。当您具有上述输入值时,输出的大小如下所示:
在我们的MNIST模型中,输入为28x28,滤波器为5x5。并且步幅使用1和填充使用2。因此,输出的大小如下:
2.池化层
池化可减少要素图的维数,提取要素并缩短执行时间。
通常使用max-pooling或average-pooling。
由于在此模型中使用了max-pooling,因此我们定义了max-pooling函数,如下所示:
输入尺寸(W)
池化大小(K)
池化步长(S)
池化零填充(P)
在我们的模型中,输入是28x28,池大小是2x2,补长是2,零填充,所以我们将输出大小如下。
3.全连接层
4.组合调用
现在让我们通过组合我们创建的函数来创建整个模型。您可以使用我们按顺序创建的功能。
需要注意的一点是,当您在最后一次池化后转到fc层时,必须通过将一维向量的大小乘以原始数组的每个维度的长度来重新整形三维数组的一维数组。
最后,将dropout应用到fc层。
5.loss
6.评估
在训练时,需要评估每个epoch的准确率。
7.运行
7.1 数据shape变化
7.2 运行精度