在上一讲中,我们学习了如何利用手动搭建卷积神经网络。但在实际的图像识别中,使用去手写 CNN 未免有些吃力不讨好。在 DNN 的学习中,我们也是在手动搭建之后利用去重新实现一遍,一来为了能够对神经网络的传播机制能够理解更加透彻,二来也是为了更加高效使用开源框架快速搭建起深度学习项目。本节就继续和大家一起学习如何利用搭建一个卷积神经网络。
我们继续以 NG 课题组提供的 sign 手势数据集为例,学习如何通过快速搭建起一个深度学习项目。数据集标签共有零到五总共 6 类标签,示例如下:
先对数据进行简单的预处理并查看训练集和测试集维度:
可见我们总共有 1080 张 64643 训练集图像,120 张 64643 的测试集图像,共有 6 类标签。下面我们开始搭建过程。
创建
首先需要为训练集预测变量和目标变量创建占位符变量,定义创建占位符变量函数:
参数初始化
然后需要对滤波器权值参数进行初始化:
执行卷积网络的前向传播过程
前向传播过程如下所示:
CONV2D -> RELU -> MAXPOOL -> CONV2D -> RELU -> MAXPOOL -> FLATTEN -> FULLYCONNECTED
可见我们要搭建的是一个典型的 CNN 过程,经过两次的卷积-relu激活-最大池化,然后展开接上一个全连接层。利用搭建上述传播过程如下:
计算当前损失
在中计算损失函数非常简单,一行代码即可:
定义好上述过程之后,就可以封装整体的训练过程模型。可能你会问为什么没有反向传播,这里需要注意的是帮助我们自动封装好了反向传播过程,无需我们再次定义,在实际搭建过程中我们只需将前向传播的网络结构定义清楚即可。
封装模型
对训练集执行模型训练:
训练迭代过程如下:
我们在训练集上取得了 0.67 的准确率,在测试集上的预测准确率为 0.58 ,虽然效果并不显著,模型也有待深度调优,但我们已经学会了如何用快速搭建起一个深度学习系统了。
注:本深度学习笔记系作者学习 Andrew NG 的 deeplearningai 五门课程所记笔记,其中代码为每门课的课后assignments作业整理而成。
参考资料:
https://www.coursera.org/learn/machine-learning
https://www.deeplearning.ai/
领取专属 10元无门槛券
私享最新 技术干货