实战 MLP CNN 实践mnist

一、CNN基础知识点

1、局部感知
生物视觉系统中的视觉皮层是局部接受信息的, 图像的部分关键像素信息也是有局部联系的。MLP中神经元是全连接,而可以改进成先由局部到全局的一个过程,如图:
这里写图片描述
如图每个卷积单元与10*10个像素相连,那么参数(1000/10)(1000/10)(10×10)=10^6个参数,减少为全连接的百万分之一

2、权值参数共享
简单来说就是一个卷积核的权重参数是相同的或者说只有一套,每个卷积核是去提取传入图片像素的某一个特征的,而这个特征与在图片中的位置无关,我们有多少个卷积核就提取到了多少特征.
这里写图片描述
如图这是一个3*3的卷积核在5*5的图上做卷积操作,卷积核与每个像素进行运算,图像中符合条件的部分被卷积核提取出来了

3、多卷积核
1个卷积核只提取一部分特征,那要抽象复杂信息,自然是不够的。多个卷积核就像一张图片的多个通道,每个通道表示不同的信息
这里写图片描述

4、池化
通常卷积操作出的特征后就可以进全连接进行分类了,但是这时又面临计算量的问题,而且非常容易过拟合。池化简单理解和图像模糊的算法一样,对一个区域的特征信息进行平均或最大值操作,实践证明这种操作后可以减少过拟合现象的出现

5、多层卷积
简单来说一层卷积学到的特征是相对局部的,层数月多学到的特征越全局,实践中一般都会使用多层卷积
重点内容
6、dropout
也是用来减少过拟合的问题的,它会在当前层一定的范围内(参数设定),随机让一些神经元不与下层神经元连接
这里写图片描述

二、程序结构

为了快速调试使用不同的网络,我们稍微封装一个类来根据不同的参数构造不同模型。
大概的类图是这的
这里写图片描述

1、一些主要的函数
dense是全连接层,如果我们构造一个mlp基本用他就可以了
conv2d是卷积层,构造卷积神经网络的基本组件
max_pool是池化层
flatten是用来连接卷积网络和全连接网络的,主要作用是全连接的输出的tensor形状,转换为dense层输入的形状
dropout是防止过拟合的利器
set_optimizer_accuracy是封装了优化和检验方法
check_and_save方法用来检查当前的训练精度,如果检查出来的结果好,那就保存当前的权重

2、实践mlp
接下来我们来用个小模型实践下
先构建这个模型,is_restore的意思是不使用之前的保存的权重参数,重新开始训练,如果你改变了模型结构这个参数要设置为False,我偷懒没写兼容:)

    x = PowerMode('mnist_mlp' ,is_debug=1 ,is_restore=False)
    x.set_input_shape([None ,28**2] ,[None ,10] ,True)
    mode_config = [{
  't':'dense','u':256,'a':tf.nn.relu},
                   {
  't':'dropout'},
                   {
  't':'dense','u':10,'a':tf.nn.softmax},
                   ]
    x.set_mode(mode_config)
    x.set_optimizer_accuracy()

然后训练10轮,dropout设置为0.75,acc_step设置为1是每1轮都验证模型

x.train(mnist.train.images, mnist.train.labels, mnist.validation.images, mnist.validation.labels 
            ,epochs=10 ,batch_size=100 ,dropout=0.75 ,acc_step=1)

模型小训练速度快
这里写图片描述

3、实践CNN
我们再用一个简单的cnn模型测试下,模型结构如图
这里写图片描述

代码也很简单

def main_cnn():
    mnist = input_data.read_data_sets(DATA_DIR,one_hot=True)
    x = PowerMode('mnist_cnn' ,is_debug=1 ,is_restore=False)
    x.set_input_shape([None ,28 ,28 ,1] ,[None ,10] ,True)
    mode_config = [{
  't':'conv2d','x':
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值