在基本跑完识别代码后,再来谈一谈自己对代码的理解;

1      前向传播过程文件(mnist_forward.py)

第一个函数get_weight(shape, regularizer);

定义了w的初值和正则化损失加入losses中

第二个函数get_bias(shape):

对参数b进行设定

第三个函数forward(x, regularizer):

加入激活函数tf.nn.relu(tf.matmul(x, w1) + b1)

对输出y进行设定

此段代码在前面博客中讲过,比较简单,就不再过多叙述

2   反向传播过程文件(mnist_backward.py) 

 ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))

在计算交叉熵之前,通常要用到softmax层来计算结果的概率分布。因为softmax层并不会改变最终的分类结果(排序),所以,tensorflow将softmax层与交叉熵函数进行封装,形成一个函数方便计算:                                                           tf.nn.softmax_cross_entropy_with_logits(logits= , labels=)。

为了加速计算过程,针对只有一个正确答案(例如MNIST识别)的分类问题

这里用到softmax()函数;可以参考我前面博文。
地址:
https://www.cnblogs.com/fcfc940503/p/10983906.html
https://www.cnblogs.com/fcfc940503/p/10985129.html

读入数据

xs, ys = mnist.train.next_batch(BATCH_SIZE)

            _, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x: xs, y_: ys})

用 mnist.train.next_batch(BATCH_SIZE)随机从训练集中抽取BATCH_SIZE个样本输入神经网络;feed_dict={x: xs, y_: ys}喂入x和y_;
测试过程文件(mnist_test.py) 
在测试过程中,导入了引入 time 模块、tensorflow、input_data、前向传播mnist_forward、反向传播 mnist_backward 模块和 os 模块,并规定程序 5 秒的循环间隔时间。
with tf.Graph().as_default() as g:
     此函数利用tf.Graph()复现之前定义的计算图,就是将定义好的神将网络在计算图中复现
        correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
此函数是计算模型在测试集上的准确率;

其中

y 表示在一组数据(即 batch_size 个数据)上神经网络模型的预测结果,y 的形状为[batch_size,10],每一行表示一张图片的识别结果。通过tf.argmax()函数取出每张图片对应向量中最大值元素对应的索引值,组成长度为输入数据 batch_size 个的一维数组。通过 tf.equal()函数判断预测结果张量和实际标签张量的每个维度是否相等,若相等则返回 True,不 相等则返回 False。

通过 tf.cast() 函数将得到的布 尔 型 数 值 转 化 为 实 数 型 ,

再通过tf.reduce_mean()函数求平均值,最终得到神经网络模型在本组数据上的准确率

以上内容主要讲解mnist 数据集的识别源码中我认为不好理解或者还没理解的内容,主要目的是为了熟悉该代码的框架和相关内容。

以实例来增进知识的了解我认为更好吸收

mnist 数据集的识别源码解析的更多相关文章

  1. 下载MNIST数据集脚本input_data源码

    # Copyright 2015 Google Inc. All Rights Reserved.## Licensed under the Apache License, Version 2.0 ( ...

  2. Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

    前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...

  3. 谷歌BERT预训练源码解析(三):训练过程

    目录前言源码解析主函数自定义模型遮蔽词预测下一句预测规范化数据集前言本部分介绍BERT训练过程,BERT模型训练过程是在自己的TPU上进行的,这部分我没做过研究所以不做深入探讨.BERT针对两个任务同 ...

  4. [源码解析] Flink的groupBy和reduce究竟做了什么

    [源码解析] Flink的groupBy和reduce究竟做了什么 目录 [源码解析] Flink的groupBy和reduce究竟做了什么 0x00 摘要 0x01 问题和概括 1.1 问题 1.2 ...

  5. [源码解析] GroupReduce,GroupCombine 和 Flink SQL group by

    [源码解析] GroupReduce,GroupCombine和Flink SQL group by 目录 [源码解析] GroupReduce,GroupCombine和Flink SQL grou ...

  6. [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入

    [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 目录 [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 0x00 摘要 0 ...

  7. [源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer

    [源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer 目录 [源码解析] 深度学习分布式训练框架 horovod (7) --- Distri ...

  8. [源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampler

    [源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampler 目录 [源码解析] PyTorch 分布式(1) --- 数据加载之DistributedSampl ...

  9. [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练

    [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 目录 [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 0x00 摘要 0 ...

随机推荐

  1. 二叉堆(2)LeftistHeap

    左倾堆,用于堆的快速合并. 规则: ① 节点的键值小于或等于它的左右子节点的键值. ② 节点的左孩子的NPL >= 右孩子的NPL. ③ 节点的NPL = 它的右孩子的NPL + 1. 测试文件 ...

  2. 教你阅读Python开源项目代码

    为什么要阅读开源代码 阅读 Python 开源项目代码主要有如下三个原因: 在工作过程中遇到一些问题 Google 和 StackOverFlow 等网站找不到解决办法,只能去翻源码. 对某些项目或者 ...

  3. ECMAScript基本语法——⑤运算符 三元运算符

    ?: 简化ifelse的操作

  4. Structure preserving unsupervised feature selection

    Abstract • 使用自表示模型提取特征间的关系,结构保留约束来保持数据的局部流形结构: 1  Introduction • Contributions: (1)提出基于自表示模型的特征选择: ( ...

  5. Wannafly Camp 2020 Day 7K 修炼

    搞了半天才发现TMD是个模拟 #include <bits/stdc++.h> using namespace std; #define int long long int x,y,p,q ...

  6. [0CTF 2016]piapiapia{PHP反序列化漏洞(PHP对象注入)}

    先上学习链接: https://www.freebuf.com/column/202607.html https://www.cnblogs.com/ichunqiu/p/10484832.html ...

  7. jenkins 集成环境搭建

    http://www.cnblogs.com/jenniferhuang/p/3355252.html

  8. Web测试控件测试点总结

    1. https://www.testwo.com/blog/344  文本输入框测试用例 验证输入框是否trim处理 注:trim()函数作用是 去掉字符序列左边和右边的空格,中间的空格不管.如果字 ...

  9. Python实现求多个集合之间的并集

    目的:求多个集合之前的并集,例如:现有四个集合C1 = {11, 22, 13, 14}.C2  = {11, 32, 23, 14, 35}.C3 = {11, 22, 38}.C4 = {11,  ...

  10. openresty入门文章(笔者自用)

    推荐好的openresty入门介绍文章:https://www.cnblogs.com/digdeep/p/4859575.html