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

  在tf第一个例子的时候需要很多预备知识。

  1. tf基本知识

  2. 香农熵

  3. 交叉熵代价函数cross-entropy

  4. 卷积神经网络

  5. softmax

    这里用到的tf基本知识

  1. tf.tensor-张量,其实就是矩阵。官方说法是原料
  2. tf.Varible-变量,用来记录数据,参数。其实也是个矩阵。不过要初始化后才有具体的值
  3. tf.Session()-会话,就是个模型,我们可以在里面添加数据流动方向,运算节点

  香农熵

  香农熵是计算信息复杂度的公式。

  公式如下

  要理解这个公式不难。举例是最好的方法。首先是硬币,正面概率1/2反面1/2

  那么H(x)=-(1/2log(1/2)+1/2log(1/2))=1

  假如有在某种情况下有4种可能就是

  H(x)=-(1/4log(1/4)+1/4log(1/4)+1/4log(1/4)+1/4log(1/4))=2

  可以明显看出,问题的分类越多,结果越多,那么复杂度越高。不确定性越高,比如我们在决策树中要做的就是每次都把信息熵最高的选出来然后递归决策

  交叉熵代价函数cross-entropy

  这是个更优化的损失函数比起常规的cost function.

  机器学习中第一个遇见的是sigmod函数,这个函数在开始时梯度小,学习速率慢。我们看下图就知道

  

  CROSS-ENTROPY解决了初时时学习速率过小的问题

  cross-entropy和香农熵的公式有点像,但是千万不要搞混。

  

  这里的p是样本的真实分布

  q是带估计的模型,也就是我们的预测。

  同样举例是最好理解公式的方法。

  (1)我们假设硬币抛100次正面1/3反面2/3.我们预测是1/2  1/2

  然后h(x)=-(1/3*-1+2/3*-1)=1

  我们再假设硬币抛100次是正面1/3反2/3 我们预测是正0.001 反0.999

  h(x)=-(1/3*负无穷+2/3*0)=正无穷

  (2)再假设某种概率都是1/4我们预测也都是1/4

  h(x)=-(1/4*-2*4)=2

  如果我们预测为1/8 1/4  1/8 1/2

  h(x)=-(1/4*-3+1/4*-2+1/4*-3+1/4*-1)=2.25

  对比两个例子可以发现,当预测越准时候,交叉熵越小,反之交叉熵越大,(1)中可以看到对于离谱的预测,交叉熵也会变得非常之大

  卷积神经网络-以下内容全部来自https://my.oschina.net/u/876354/blog/1620906  一篇超级好的blog

  

  如图卷积层就是图中的filter-它的作用是提取特征值-参考卷积公式可以知道就是对图像的遍历操作

  这里的卷积层是5*5*3(3是深度这里也就是rgb)所以-一次卷积后得到28*28*3   两次后是24*24*3

  发现一遍超级好文:放下地址

  https://my.oschina.net/u/876354/blog/1620906   超级详细的cnn解释

 池化层

  作用:将图片缩小,减少像素保留特征值,以便后来加快计算。我这里COPY了上面BLOG的部分内容。万一那个BLOG炸了我还有备份

  (5)池化(Pooling)

为了有效地减少计算量,CNN使用的另一个有效的工具被称为“池化(Pooling)”。池化就是将输入图像进行缩小,减少像素信息,只保留重要信息。
池化的操作也很简单,通常情况下,池化区域是2*2大小,然后按一定规则转换成相应的值,例如取这个池化区域内的最大值(max-pooling)、平均值(mean-pooling)等,以这个值作为结果的像素值。
下图显示了左上角2*2池化区域的max-pooling结果,取该区域的最大值max(0.77,-0.11,-0.11,1.00),作为池化后的结果,如下图:
 
池化区域往左,第二小块取大值max(0.11,0.33,-0.11,0.33),作为池化后的结果,如下图:
 
其它区域也是类似,取区域内的最大值作为池化后的结果,最后经过池化后,结果如下:
 
对所有的feature map执行同样的操作,结果如下:
 
  最大池化(max-pooling)保留了每一小块内的最大值,也就是相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。也就是说,它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。
通过加入池化层,图像缩小了,能很大程度上减少计算量,降低机器负载。

  softmax

  这是个回归函数,不同于logistic回归解决的二分问题,sotfmax用于多类别问题。

  算是激励函数

  首先和sigmod一样

  然后

  分母是把所有神经元的值加起来

  分子是第L层第j个神经元的输出

  就是某个神经元输出占所有神经元输出的比值

  意义:当它占的比值越大,这个样本的损失越小

  

  

  

  

深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识的更多相关文章

  1. 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别

    深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...

  2. 【OpenCV】opencv3.0中的SVM训练 mnist 手写字体识别

    前言: SVM(支持向量机)一种训练分类器的学习方法 mnist 是一个手写字体图像数据库,训练样本有60000个,测试样本有10000个 LibSVM 一个常用的SVM框架 OpenCV3.0 中的 ...

  3. TensorFlow—多层感知器—MNIST手写数字识别

    1 import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data import ...

  4. 第二节,mnist手写字体识别

    1.获取mnist数据集,得到正确的数据格式 mnist = input_data.read_data_sets('MNIST_data',one_hot=True) 2.定义网络大小:图片的大小是2 ...

  5. mnist手写数字识别——深度学习入门项目(tensorflow+keras+Sequential模型)

    前言 今天记录一下深度学习的另外一个入门项目——<mnist数据集手写数字识别>,这是一个入门必备的学习案例,主要使用了tensorflow下的keras网络结构的Sequential模型 ...

  6. 深度学习之 mnist 手写数字识别

    深度学习之 mnist 手写数字识别 开始学习深度学习,先来一个手写数字的程序 import numpy as np import os import codecs import torch from ...

  7. 用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别

    用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别 http://phunter.farbox.com/post/mxnet-tutorial1 用MXnet实战深度学 ...

  8. 深度学习---手写字体识别程序分析(python)

    我想大部分程序员的第一个程序应该都是“hello world”,在深度学习领域,这个“hello world”程序就是手写字体识别程序. 这次我们详细的分析下手写字体识别程序,从而可以对深度学习建立一 ...

  9. Android+TensorFlow+CNN+MNIST 手写数字识别实现

    Android+TensorFlow+CNN+MNIST 手写数字识别实现 SkySeraph 2018 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站 ...

随机推荐

  1. Linux - Confluence搭建

    0. 摘要 Confluence自身携带内置数据库,对于生产环境建议搭建外置数据库,Confluence通过相应驱动连接上.并操作数据库.Confluence支持多种数据库,本文采用MySQL. 1. ...

  2. Spring源码分析(二十四)初始化非延迟加载单例

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 完成BeanFactory的初始化工作,其中包括ConversionS ...

  3. N项阶乘累加求和新算法

    pdf原版链接

  4. rdlc报表随笔心得 ,基本结构和一些表达式。

    Dataset Form RDLC 主要放数据集的文件夹 存放窗体的文件夹 存放各种报表的文件夹 第一部,创建报表结构 首先添加数据集项 添加完成之后我们会看到这个页面 之后我们在上面添加一些数据集 ...

  5. 第一次作业:基于Linux-0.12的进程分析

    这次作业主要基于Linux-0.12的源代码,分析Linux是如何组织进程,进程的状态之间是如何转换,以及进程是如何调度的. 一. 进程的概念: 1.进程就是:程序在数据集合上的一次运行过程,是系统进 ...

  6. PHP SHA1withRSA加密生成签名及验签

    最近公司对接XX第三方支付平台的代付业务,由于对方公司只有JAVA的demo,所以只能根据文档自己整合PHP的签名加密,网上找过几个方法,踩到各种各样的坑,还好最后算是搞定了,话不多说,代码分享出来. ...

  7. Django model字段类型(转)

    AutoField     一个 IntegerField, 添加记录时它会自动增长. 你通常不需要直接使用这个字段; 如果你不指定主键的话,系统会自动添加一个主键字段到你的 model.(参阅 _自 ...

  8. 一维码Codabar简介及其解码实现(zxing-cpp)

    一维码Codabar:由4条黑色线条,3条白色线条,合计7条线条所组成,每一个字元与字元之间有一间隙Gap做区隔. 条形码Codabar包含21个字元: (1).10个数字0~9; (2)." ...

  9. 【SDOI2017】新生舞会

    题面 题解 一眼\(0/1\)分数规划 二分答案\(mid\),我们要\(\sum\limits_i a^{'}_i - mid\sum\limits_i b_i^{'}\)最大 那么我们将\(a_{ ...

  10. Codeforces 873 B. Balanced Substring(前缀和 思维)

    题目链接: Balanced Substring 题意: 求一个只有1和0的字符串中1与0个数相同的子串的最大长度. 题解: 我的解法是设1的权值是1,设0的权值是-1,求整个字符串的前缀和并记录每个 ...