tensorflow 入门之MNIST


  1. 概述:
    1. 数据结构:
      1. 输入输出:本质上是一个n*m的矩阵MM,可以理解为m列长度不同(神经网络允许不同层有不同数目的cell)的单列矩阵组成的。
        1. 模型预构造(人工输入):矩阵。初始可以将所有的非零值设置为1。
        2. 样本输入:n行单列矩阵,即神经网络矩阵的左侧输入NN。
        3. 输出:n行单列(非零数据个数x<=n)矩阵,即神经网络矩阵的右侧输出OOTMP。
        4. 输出转换:训练数据集通常带有标签,标签数值所在空间同OO数值空间可能不一致,因此需要将OOTMP转换为标签空间的OO。
      2. 函数:MM*NN+BB=OOTMP。其中BB是偏置量矩阵
      3. 参考转载的《深度学习为何要“deep”(上)》,实际上对输出OOTMP还有个a(OOTMP)的转换过程,负责旋转变换,每一层都要做这个转换!通常是以下几个函数,可参考https://www.zhihu.com/question/48931796/answer/114310813:
        1. sigmoid
        2. tanh
        3. ReLU==max(0,x)
    2. 流程概述:
      1. 构造矩阵:构造MM
      2. 构造成本函数:衡量计算输出值(计算值)同标签(实际值)的差异度
      3. 微调值负反馈:矩阵输出端反向输入一个降低差异度的值δ ,负反馈到矩阵输入端,用来逐步调整矩阵中的各Wij变量。
      4. 最终目标:通过多次输入多个δ,每次改变一点Wij,最终实现计算输出基本等于标签的情况,即对于训练数据,基本100%识别,得到最终MM' 。
  2. 应用:
    1. 分类器-流程:
      1. 构造矩阵:构造MM
      2. 构造成本函数:
        1. 将输出和标签映射到一个空间可比----->将输出空间映射到概率空间:将样本输入分类,即将神经网络计算结果输出分类。分类最常用的就是概率,即需要将神经网络算法输出的单列矩阵的各数值所在空间A映射到新的空间B,在B中,所以数值的∑是1,并且A和B中各数值的大小关系基本保持不变(做到百分之百也可以,但是可能会使映射算法很复杂不利于计算推广)
          1. 空间映射算法:
            1. softmax
            2. sigmoid
        2. 将输出和标签映射到一个空间可比----->将概率空间映射到标签空间(反向映射也可以):概率空间的单列矩阵输出是提供了该输入样本属于所有类别的可能概率。标签空间是提供了该输入样本属于的某个确定类别。前者是属于每个类别的概率,后者是指定了目标类别(相当于其他类别概率都是0,目标类别概率100%)。------->即将属于每个类别的概率映射为是某个目标类别,最简单方法是将概率最大的那个类别取出来。--->即将一维数组中满足某个条件的值所在的index取出来。
            1. argmax:
              1. 作用:只保留某个维度i,将其余维度压缩,压缩的算法是取其余所有维度的所有值中max的对应的在i维度的映射值。
              2. 举例:(null,10)的二维数组,保留1维度即y维度,即x轴压缩,每一行压缩成一个值,该值是该行所有数中max对应的x坐标。
              3. 如果用这个算法,第一步softmax转成概率空间再argmax,其实意义不大??????
        3. 可比之后,构造成本函数:
          1. 交叉熵:编码方案不一定完美时(由于对概率分布的估计不一定正确),平均编码长度的是多少。根据香农信息理论,熵的本质是香农信息量log(1/p) 的期望。交叉熵一定不小于熵,多出的就是误差导致的。因此缩小交叉熵就是使目标接近真实的熵即真实结果。
      3. 负反馈微调:
        1. 确定输出端表征空间:使用交叉熵
        2. 确定输出端表征空间微调缩减最优方向:
          1. Gradient descent:最优缩减方向,一般是改变量最大的方向,即曲线的法线方向,即梯度方向。
          2. Batch_Size:每次从训练集中提取的样本数目。
            1. 数目过大:会更好的拟合训练集,但计算耗时,还有Rprop相关?
            2. 数目过小:计算迅速,但容易陷入局部最优,每个batch的局部最优向量结果可能互相抵消。
        3. 确定每次缩减的步长:一般0.01
        4. 确定输出端微调δ_output,矩阵各权重怎么调整:计算输出端相对每个目标权重节点的导数(求微分),将输出节点和目标节点之间的全部路径微分值相乘得到。但可能输入非常多,层数很深,一个一个求非常费时间。因此使用Backpropagation一次把全部都求出来,加速。
          1. Backpropagation:链式法则反向应用,不同路径间可以相乘组合。常用形式是(a+b+c)(d+e+f)。
        5. 已知输出OUT的微调向量V;已知OUT相对每个Wij的微分;计算出对OUT微调V后,每个Wij的微调VWij,更新Wij。
        6. 迭代,直到OUT基本收敛。
      4. 最终目标:计算出最合适的矩阵,使得从测试数据集中给出的样本数据+标签经过矩阵分类出的类别同标签的匹配率较高。
  3. tensorflow实现:
    1. op:计算节点。定义两个op,op1和op2,定义函数op1=f(op2),则op1和op2之间通过一条边产生关联。op1又可以作为另一个函数输入。这样,可以形成多个op(点)通过多个函数(边)对应的图。该图就是神经网络,函数就是神经网络的边(即矩阵的权重Wij),op就是神经网络中的点。
    2. 特殊op----placeholder:占位符,通常用于表征输入。后续run的时候再传入具体的值。
    3. 计算op:多个op构成图,最终输出的op可以作为run函数的输入(所有op即变量需要先initialize_all_variables初始化)。系统会运行一次该图表征的函数关系式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值