人工智能-深度学习(3)TensorFlow 实战一:手写图片识别

http://gitbook.cn/gitchat/column/59f7e38160c9361563ebea95/topic/59f7e86d60c9361563ebeee5html

wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.htmlgit

1、简介

手写图片识别的实现,分为三步:数组

  • 1,数据的准备
  • 2,模型的设计
  • 3,代码实现
    个人另外一篇博文-神经网络的解释
    什么是神经网络

这里写图片描述
input层表明将二维数组从全部行都排列成一行,hidden层表明若干次处理,output层存储计算获得的结果,最后输出几率最大的网络

知乎神经网络的解释
总结一下:
神经元就是分类器,能够根据正确的值进行调整机器学习

反向传播训练神经网络函数

1.神经网络深刻浅出
!!!!!!!!!!!!!!!!!认真看两遍,保证你神清气爽。看懂了后,回来点个赞,就当你的答谢了。这个博客下的另外一篇文章也写的不错
2.从机器学习谈起 推荐 不错,不过,我推的都只是适合初学者哦,大神们绕道走开
3.还有一篇关于SVM的,虽然有点跑题了,可是也以为特别好。SVM讲解
虽然第三个连接有点跑题,可是讲真,学AI怎能不学SVM,这是我在一次双语课上作pre,查资料用到的最多的一个blog了。认真看两遍,基本能够本身跑代码了。仍是不会的,欢迎私信我,一块儿进步。哈哈哈哈哈
开心,我觉得会没人看,一夜醒来赞变多了,也算是确定了。学神经网络的人儿们好好努力哦,好了,大早上的,我也继续看书了。学习

做者:知乎用户 连接:https://www.zhihu.com/question/22553761/answer/267280164
来源:知乎 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。测试

2、数据的准备

Kaggle 里包含了42000份训练数据和28000份测试数据(和谷歌准备的 MNIST 数据,在数量上有所不一样)。训练和测试数据的下载地址能够百度也能够点这里。下载下来是两个CVS文件。
这里写图片描述优化

3、模型设计

这个模型,组成是这样的:编码

  • 使用一个最简单的单层的神经网络进行学习
  • 用 SoftMax 来作为激活函数
  • 用交叉熵来作损失函数
  • 用梯度降低来作优化方式

神经网络:由不少个神经元组成,每一个神经元接收不少个输入:[X1,X2….Xn],加权相加而后加上偏移量后,看是否是超过了某个阀值,超过了发出1,没超过发出0。

神经网络:由不少个神经元组成,每一个神经元接收不少个输入:[X1,X2….Xn],加权相加而后加上偏移量后,看是否是超过了某个阀值,超过了发出1,没超过发出0。

想要成为激活函数,你得有两把刷子啊。这两把刷子是:一是你得到处可微,可微分才能求导,求极值。二是要非线性的,由于线性模型的表达能力不够。
目前主流的几个激活函数是:sigmoid,tanh,ReLU。

sigmoid:采用 S 形函数,取值范围[0,1] tanh:双切正切函数,取值范围[-1,1]
ReLU:简单而粗暴,大于0的留下,不然一概为0。

SoftMax:咱们知道 max(A,B),是指 A 和 B 里哪一个大就取哪一个值,但咱们有时候但愿比较小的那个也有必定几率取到,怎么办呢?咱们就按照两个值的大小,计算出几率,按照这个几率来取 A 或者 B。好比A=9,B=1,那取 A 的几率是90%,取B的几率是10%。

损失函数:损失函数是模型对数据拟合程度的反映,拟合得越好损失应该越小,拟合越差损失应该越大,而后咱们根据损失函数的结果对模型进行调整。

交叉熵:这个概念要解释的简单,那就不许确,若是要准确,那可能一千字都打不住。这里说一个简单但不必定准确的解释吧。

好比,你想把乾坤大挪移练到第七层大圆满,你如今是第五层,那你还差两层,这个两层就是你和大圆满之间的距离。交叉熵通俗的讲就是如今的训练程度和圆满之间的距离,咱们但愿距离越小越好,因此交叉熵能够做为一个损失函数,来衡量和目标之间的距离。

梯度降低:这个概念能够这样理解,咱们要解决的问题是一座山,答案在山底,咱们从山顶到山底的过程就是解决问题的过程。

在山顶,想找到最快的下山的路。这个时候,咱们的作法是什么呢?在每次选择道路的时候,选最陡的那条路。梯度是改变率或者斜度的另外一个称呼,用数学的语言解释是导数。对于求损失函数最小值这样的问题,朝着梯度降低的方向走,就能找到最优值了。

4、代码实现

1,载入数据,并对数据进行处理
在写代码的过程当中,数据的预处理是最大的一块工做,作一个项目,60%以上的代码在作数据预处理。 这个项目的预处理,分为5步:

  • 把输入和结果分开
  • 对输入进行处理:把一维的输入变成28*28的矩阵
  • 对结果进行处理:把结果进行 One-Hot 编码
  • 把训练数据划分训练集和验证集
  • 对训练集进行分批
相关文章
相关标签/搜索