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

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

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

一、简介

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

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

这里写图片描述
input层代表将二维数组从所有行都排列成一行,hidden层代表若干次处理,output层存储计算得到的结果,最后输出概率最大的

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

反向传播训练神经网络

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

作者:知乎用户 链接:https://www.zhihu.com/question/22553761/answer/267280164
来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

二、数据的准备

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

三、模型设计

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

  • 使用一个最简单的单层的神经网络进行学习
  • 用 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%。

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

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

比如,你想把乾坤大挪移练到第七层大圆满,你现在是第五层,那你还差两层,这个两层就是你和大圆满之间的距离。交叉熵通俗的讲就是现在的训练程度和圆满之间的距离,我们希望距离越小越好,所以交叉熵可以作为一个损失函数,来衡量和目标之间的距离。

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

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

四、代码实现

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

  • 把输入和结果分开
  • 对输入进行处理:把一维的输入变成28*28的矩阵
  • 对结果进行处理:把结果进行 One-Hot 编码
  • 把训练数据划分训练集和验证集
  • 对训练集进行分批
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值