要进一步改进MNIST学习算法,需要对卷积神经网络进行学习和了解

学习材料参见https://www.cnblogs.com/skyfsm/p/6790245.html

卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统网络的一个改进,多了许多神经网络没有的层次。

• 数据输入层/ Input layer
 • 卷积计算层/ CONV layer
 • ReLU激励层 / ReLU layer
 • 池化层 / Pooling layer
 • 全连接层 / FC layer

1.数据输入层

  这层做的处理主要是对原始图像数据进行预处理,其中包括:

  去均值:把输入数据各个维度都中心化为0,目的是把样本的中心拉回到坐标系原点上

  归一化:幅度归一化到同样的范围,即减少各维度取值范围的差异而带来的干扰。

  PCA/白化:用PCA降维,白化是对数据各个特征轴上的幅度归一化

去均值及归一化效果

去相关与白化效果

2.卷积计算层

  这一层就是卷积神经网络最重要的一个层次,也是“卷积神经网络”的名字来源。它有两个关键操作

  •   局部关联。每个神经元看做一个滤波器(filter)
  •   窗口滑动,filter对局部数据进行计算

  几个在卷积层常遇到的名词

  •   深度depth
  •   步长stride(窗口一次滑动的长度)
  •   填充值zero-padding

什么是填充值?

-----》

以该图为例,假如我们的滑动窗口取2*2,步长取2,那么发现还剩了一个像素没法识别进去,所以这时我们在原型的矩阵加了一层填充值,使得变成6*6的矩阵,那么窗口就可以刚好把所有像素遍历完。

卷积是怎么计算的?

这里蓝色矩阵就是输入的图像(外面有一圈灰色的0,即填充值)。粉色矩阵就是卷积层的神经元,这里有两个神经元(w0,w1),注意最下面还有一个偏差值。绿色矩阵是经卷积运算后的输出矩阵,这里步长设置为2

这张图显示了卷积计算的具体过程。蓝色矩阵对粉色矩阵进行内积运算,并把三个内积运算与偏差值b相加,计算后的值就是绿框矩阵的一个元素。

上面这张动图展示了卷积层的计算过程

参数共享机制

在卷积层中每个神经元连接数据窗的权重是固定的,每个神经元值关注一个特性。神经元是图像处理中的滤波器,比如边缘检测专用的sobel滤波器,即卷积层的每个滤波器都会有自己所关注一个图像特征,比如垂直边缘,水平边缘,颜色,纹理等,所有这些神经元加起来就是一整张图像的特征提取器合集。

3.激励层

  把卷积层输出结果做非线性映射,就是普通神经网络的内容

CNN一般采用的激励函数f()是ReLU(The Rectified Linear Unit线性修正单元),特点是收敛快,求梯度简单,但较脆弱,图像如下

  

原作者提供的一些经验:
  1)不要使用sigmoid

  2)首先试用ReLU,因为快,但需要注意

  3)2不行,就采用Leaky ReLU 或者 Maxout

  4)某些情况下tanh效果不错,但是情况很少

4.池化层

  池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减小过拟合。如果输入是图像,那么池化层的最主要作用就是压缩图像。(和opencv里的有个部分很像)

池化层具体作用有如下几点:

1.特征不变性,也就是我们在图像处理中常提到的特征的尺度不变性,池化操作就是图像的resize。一张狗的图像缩小了一倍我们还能认出这是一张狗的照片,说明这张图片中仍保留了狗的重要特征。图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则具有尺度不变性的特征,是最能表达图像的特征。

2.特征降维:我们知道衣服图像含有的信息量很大,特征很多,而其中有些信息对我们最终目的没什么用途或者重复,可以把这类冗余信息去除,把最重要的特征抽取出来。

3.在一定程度上可以防止过拟合,更方便优化

池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是maxpooling。这里就说一下Max pooling

对于每个2*2 的窗口中选出最大的数作为输出矩阵的相应元素的值

5.全连接层

两层之间的所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:

一般CNN结构是:

  1. INPUT
  2. [[CONV -> RELU]*N -> POOL?]*M
  3. [FC -> RELU]*K
  4. FC

卷积神经网络的训练算法

1.同一般机器学习算法,先定义Loss function,衡量和实际结果之间差距

2.找到最小化损失函数的W和b,CNN中用的是随机梯度下降

优劣:

  • 共享卷积核,对高维数据处理没有压力
  • 无需手动选取特征,训练好权重即得特征分类效果好
  • 需要调参,需要大样本量
  • 物理含义不明确

fine-tuninig

  就是使用用于其他目标,预训练好模型的权重或部分权重,作为初始值开始训练

  有点有二:一是自己从头随机选取几个数作为权重初始值训练卷积网络容易出现问题;二,fine-tuning能很快收敛到一个较为理想的状态,既省时又省心

  具体操作方式是

  1)复用相同层的权重,新定义的层采用随机权重初始值

  2)调大新定义层的学习率,调小复用层的学习率

TensorFlow 学习(4)——MNIST机器学习进阶的更多相关文章

  1. MNIST机器学习进阶

    # -*- coding: utf-8 -*-"""Created on Wed Oct 17 08:49:28 2018 @author: Administrator& ...

  2. tensorflow学习001——MNIST

    1.MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片 数据集被分成两部分:60000行的训练数据集(mnist.train)和10000行的测试数据集(mnist.test). 这样的 ...

  3. Tensorflow学习笔记(一):MNIST机器学习入门

    学习深度学习,首先从深度学习的入门MNIST入手.通过这个例子,了解Tensorflow的工作流程和机器学习的基本概念. 一  MNIST数据集 MNIST是入门级的计算机视觉数据集,包含了各种手写数 ...

  4. 21个项目玩转深度学习:基于TensorFlow的实践详解01—MNIST机器学习入门

    数据集 由Yann Le Cun建立,训练集55000,验证集5000,测试集10000,图片大小均为28*28 下载 # coding:utf-8 # 从tensorflow.examples.tu ...

  5. TensorFlow学习---入门(一)-----MNIST机器学习

    参考教程:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html 数据下载地址:http://wiki.jikexueyuan.com ...

  6. TensorFlow学习笔记(二)-- MNIST机器学习入门程序学习

    此程序被称为TF的 Hello World,19行代码,给人感觉很简单.第一遍看的时候,不到半个小时,就把程序看完了.感觉有点囫囵吞枣的意思,没理解透彻.现在回过头来看,感觉还可以从中学到更多东西. ...

  7. TensorFlow框架(3)之MNIST机器学习入门

    1. MNIST数据集 1.1 概述 Tensorflow框架载tensorflow.contrib.learn.python.learn.datasets包中提供多个机器学习的数据集.本节介绍的是M ...

  8. 机器学习与Tensorflow(3)—— 机器学习及MNIST数据集分类优化

    一.二次代价函数 1. 形式: 其中,C为代价函数,X表示样本,Y表示实际值,a表示输出值,n为样本总数 2. 利用梯度下降法调整权值参数大小,推导过程如下图所示: 根据结果可得,权重w和偏置b的梯度 ...

  9. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

随机推荐

  1. qt tableview中如何添加右键菜单且不可编辑单元格

    QTableView是一个比较实用的类,下面教给大家如何在QTableView中添加右键菜单. #include <QMenu>#include <QAction> QTabl ...

  2. Mysql学习笔记【一、环境安装&配置】

    安装 https://www.mysql.com/ 官网下载安装包msi 安装流程略去 注:此处有坑,重新安装mysql 8之后,发现mysql起不来,可能原因有以下几点 1.没有data文件,运行m ...

  3. JDBC的两种sql命令发送器比较【Statement:PreparedStatement】

    PreparedStatement 接口继承 Statement接口如果需要多次执行一个SQL语句,可以使用PreparedStatement对象.在创建PreparedStatement对象时,通过 ...

  4. Linux使用storcli工具查看服务器硬盘和raid组信息

    1.简介 MegaCli 是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli, 需要去Broadcom官网查找Legacy产品支持,搜 ...

  5. 移动端的文本框获取焦点时导致fixed或absolute定位的按钮被手机键盘顶上去的问题

    var win_h = $(window).height();//关键代码 window.addEventListener('resize', function () { if($(window).h ...

  6. python3.6 错误: ModuleNotFoundError:No module named "Crypto"

    原因及处理:在使用python是经常会用到import一个第三方库,但是有时候会提示某个模块不存在,如Crypto其实是因为Python3里面这个模块的名字变了, pip install pycryp ...

  7. Websocket @serverendpoint 404

    今天写一个前后端交互的websocket , 本来写着挺顺利的,但测试的时候蒙了,前端websocket发的连接请求竟然连接不上 返回状态Status 报了个404 ,然后看后台onError方法也没 ...

  8. git生成公钥public key并添加SSH key。git乌龟gerrit下推送git【server sent :publickey】

    一.key 码云链接:http://git.mydoc.io/?t=180845#text_180845 博客链接: 方式一:https://blog.csdn.net/xb12369/article ...

  9. 运维堡垒机(跳板机)系统 python

    相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. A ...

  10. BZOJ 1107: [POI2007]驾驶考试egz / Luogu P3463 [POI2007]EGZ-Driving Exam (树状数组 LIS)

    能从iii走到所有跑道 相当于 能从iii走到111和nnn. 边反向后就相当于 能从111和nnn走到iii. 为了方便叙述,把111~nnn叫做x坐标,111~(m+1)(m+1)(m+1)叫做y ...