使用Keras构建神经网络进行Mnist手写字体分类

这篇博客介绍了如何使用Keras构建神经网络对Mnist手写字体进行分类。内容涵盖了安装Keras、卷积层、池化层、全连接层和Drop out的基本概念,以及数据优化和可视化的部分,包括SGD、ImageDataGenerator、误差变化曲线和识别错误图片的分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

稍微整理一下在努力学(kan)习(dong)Keras的Hello World程序的一些参考文档和思考。


安装

安装的时候需要翻墙

Keras中文文档 / Keras安装和配置指南(Windows)
http://keras-cn.readthedocs.io/en/latest/getting_started/keras_windows/
对于Keras的介绍很详细(就是看不懂)

在这一步要是安装目录存在中文的话会报错
解决方法参考
http://blog.youkuaiyun.com/all_over_servlet/article/details/45112221


基本概念

我能看懂的最简单的概念

卷积层

convout1=Convolution2D(nb_filters[0], kernel_size[0], kernel_size[1],
                        border_mode='valid',
                        input_shape=input_shape)
model.add(convout1) 

我们是如何识别出一个数字的呢?当然是因为这个数字不同于别的数字的特点,对于像MNist这样的数据,特点自然来自于明暗交界的地方。一片黑的区域不会告诉我们任何有用的信息,同样地,一片白的区域也不会告诉我们任何有用的信息。同样,数字的笔画粗细对我们的识别也没有太大的作用。这些都是我们识别过程中会遇到的问题,而其中临近像素之间有规律地出现相似的状态就是局部相关性。

那么如何消除这些局部相关性呢,使我们的特征变得少而精呢?卷积就是一种很好地方法。它只考虑附近一块区域的内容,分析这一小片区域的特点,这样针对小区域的算法可以很容易地分析出区域内的内容是否相似。如果再加上Pooling层(可以理解为汇集,聚集的意思,后面不做翻译),从附近的卷积结果中再采样选择一些高价值的合成信息,丢弃一些重复低质量的合成信息,就可以做到对特征信息的进一步处理过滤,让特征向少而精的方向前进。

作者:冯超
链接:https://zhuanlan.zhihu.com/p/21609512
来源:知乎

model.add(Activation("sigmoid"))

激活函数,通过函数把数据的特征保留并映射出来,加入非线性因素,线性的模型可能无法很好地表达关联。

池化层

model.add(MaxPooling2D(pool_size=pool_size))

对于卷积层输出map的每个不重叠n*n区域,选取每个区域中的最大值(max-pooling)或是平均值(mean-pooling),用这个值代表这个区域的值

  • 增强鲁棒性
  • 降维

全连接层

model.add(Dense(84))

Keras中的全连接层称为Dense
全连接层直接将前一层的输出展开为一维向量

Drop out

model.add(Dropout(0.5))

在训练过程中以一定概率1-p将隐含层节点的输出值清0,而用bp更新权值时,不再更新与该节点相连的权值,是一种预防过学习的机制
模拟人脑,神经元并不是完全连接的(捂脸)

还是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值