zoukankan      html  css  js  c++  java
  • 人工智能-深度学习(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 编码
    • 把训练数据划分训练集和验证集
    • 对训练集进行分批
  • 相关阅读:
    Vim+XDebug调试PHP
    JS实现多附件上传(asp.net) 中庸
    ajax+strutsi18n,validate framework(1)
    ExtJS+DWR+Spring+Hibernate开发HRMS(2)
    ajax+strutsi18n,validate framework(3)
    ajax+strutsi18n,validate framework(2)
    ajax+strutsi18n,validate framework(4)
    Java中参数传递的问题
    MyEclipse安装Extjs框架插件SpketIDE
    软件开发企业用人需求是怎样的?
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387034.html
Copyright © 2011-2022 走看看