接下来放一个卷积层。它包含32个滤波器,所以它的输出维度是 32×28×28。32个滤波器搞出来32幅图像(channel),每个都是 28×28 大小。后面又是一个32个滤波器的卷积层,输出维度也是 32×28×28。 后面接上一个 Pooling 层,降降维。一个 2×2 的取平均值 Pooling 层,把输出维度减小了一半:32×14×14。接着是一个展平层,没有运算也没有参数,只变化一下数据形状:把 32×14×14 展平成了6272元向量。 该6272元向量送给后面一个三层的全连接神经网络。该网络的神经元个数是 1000×1000×10。两个隐藏层各有1000个神经元,最后的输出层有10个神经元,代表10个数字。假如第六个输出为1,其余输出为0,就表示网络判定这个手写数字为“5”(数字“0”占第一个输出,所以“5”占第六个输出)。数字“5”就编码成了:
训练集和测试集的数字标签都这么编码(one-hot 编码)。 全连接神经网络这部分的激活函数都采用了 Sigmoid。这出于我一个过时且肤浅的理解:用“弯弯绕”较多的 Sigmoid 给网络贡献非线性。实际上当代深度学习从生物神经的行为中得到启发,设计了其它一些表现优异的激活函数,比如单边线性 Relu。 误差函数采用均方误差 mse。优化算法采用 rmsprop,这是梯度下降的一个变体。它动态调整学习速率(步长 η)。训练过程持续10轮。注意这里10轮不是指当前解在解空间只运动10步。一轮是指全部31500个训练样本都送进网络迭代一次。每次权值更新以32个样本为一个 batch 提交给算法。下图展示了随着训练,mse 的下降情况:
图15 下图是分类正确率随着训练的变化情况:
图16 该CNN在测试集上的正确率(accuracy)是96.7%,各数字的准确率 / 召回率 / f1-score 如下:
该CNN对测试集10种数字分类的混淆矩阵为: 图17 训练完成神经网络后,最有趣的是将其内部权值以某种方式展现出来。看着那些神秘的、不明所以的连接强度最后竟产生表观上有意义的行为,不由让我们联想起大脑中的神经元连接竟构成了我们的记忆、人格、情感 ... 引人遐思。 在CNN上就更适合做这种事情。因为卷积层训练出来的是滤波器。用这些滤波器把输入图像滤一滤,看看CNN到底“看到”了什么。下图用第一、二卷积层的32个滤波器滤了图13第8行第8列的那个手写数字“6”。32个 channel 显示如下: 图18 图19 其中有些把边缘高亮(输出值较大),有些把“6”的圈圈高亮,等等。这些就是CNN第一步滤波后“看到”的信息。再经过后面的各神经层,抽象程度逐层提高,它就这样“认出”了手写数字。 最后把代码附上。CNN使用的是 keras 库。数据集来自kaggle:这里。
五、参考书目 [1]《最优化导论》(美)Edwin K. P. Chong(美) Stanislaw H. Zak [2]《神经网络设计》(美)Martin T.Hagan(美)Howard B.Demuth(美)Mark Beale 原文链接:https://zhuanlan.zhihu.com/p/25249694 【寻找AI独角兽】新智元联手10大资本 启动2017创业大赛 AI 创业大赛由新智元与10 家主流 AI 创投机构:蓝驰创投、红杉资本中国基金、高瓴智成人工智能基金、蓝湖资本、蓝象资本、IDG资本、高榕资本、中信建投证券、明势资本、松禾远望基金携手发起,由新智元主办,北京市中关村科技园区管理委员会、中关村科技园区海淀园管理委员会支持,是一场聚合了 AI 技术领袖和投资领袖的盛会。新智元向满怀雄心的未来AI独角兽提供强大的创投资源对接机会,顶级风投 TS 等你来拿。
点击文章下方阅读原文,在线填写报名申请报名表。该报名表为参与评选必填资料。 (责任编辑:本港台直播) |