之前半个月的时间几乎都在看理论书籍,最近两天开始撸代码,一个跟Hello World同级别的教程例子就出来了,那就是MNIST。实现代码应该很多地方都有:

 #!/usr/bin/env python
# -*- coding: utf-8 -*- # @Author : mario
# @File : mnist_main.py
# @Project : base
# @Time : 2018-12-18 22:56:38
# @Desc : File is ... import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("data/", one_hot=True) x = tf.placeholder(tf.float32, [None, 784], "image")
W = tf.Variable(tf.zeros([784, 10]), name="weight")
b = tf.Variable(tf.zeros([10]), name="bias") y = tf.nn.softmax(tf.matmul(x, W) + b) y_ = tf.placeholder(tf.float32, [None, 10]) cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) correct_rate = tf.reduce_mean(tf.cast(correct_prediction, "float")) print(sess.run(correct_rate, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

python版本:Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31) ;tensor flow版本:1.12.0

11行,12行:导入tensorflow模块和读取数据的模块

14行:读取当前目录下data目录下的数据,在data目录下应该是下载好的数据文件(train-images-idx3-ubyte.gz、train-labels-idx1-ubyte.gz、10k-images-idx3-ubyte.gz、t10k-labels-idx1-ubyte.gz)

16行,17行,18行:为了构建模型方程设置的参数,模型方程是:y = xW+b,其中,x是自变量也就是输入参数,W是权重值,b是偏置量,所以在定义时,为一个占位符需要后期输入;W和b设置为变量参数,因为会随着训练而改变。

20行:构建整个算法模型关于softmax函数可以查一查,简单来说就是一种结果转换。y是每次训练的结果。

22行:y_是测试数据的对应标签。设置为占位符是因为我们需要输入标准的测试数据的标签。

24行:计算交叉熵

26行:实现梯度下降,学习率为0.01,学习率大小直接影响成功率和训练时间

28行:初始化

30行,32行:使用session提交执行图

34行:设置训练次数1000次

35行:读取训练数据,每次100个

36行:开始运行训练模型,其中feed_dict是为占位变量设置值

38行,40行:比较标准标签结果和测试结果,计算成功率

42行:运行计算成功率,将带测试的数据赋值给占位符

整个过程是不很复杂,其中一些算法的实现原理资料上都随便找得到。不过在这其中遇到过两个异常:

1:没有导入from tensorflow.examples.tutorials.mnist import input_data,而是将tensorflow.examples.tutorials.mnist 当作了14行的mnist使用,在执行到35行时抛出异常,异常为:AttributeError: module 'tensorflow.examples.tutorials.mnist.mnist' has no attribute 'train',一开始一直不知道原因,后来发给朋友,她告诉我没有导入数据集,突然才意识到真的忘记导入数据集了。

2:异常信息:
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [?,10]
     [[node Placeholder (defined at /Users/mario/CodeRepository/PycharmProjects/base/cn/mario/tensorflow/mnist/mnist_main.py:22)  = Placeholder[dtype=DT_FLOAT, shape=[?,10], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

网上貌似也有一些人遇到了这个问题,开始也是很郁闷的,错误信息是没有给占位符赋值,placeholder需要一个类型为float形状为[?,10],我尝试了改变几种类型,但是如果类型不一致的话,错误信息会很直接的说明,它需要的是类型A,而你给了类型B,更改shape也是如此,所以开始感觉应该是不是类型不对dtype和shape的匹配问题,而是占位符就根本没有赋值,于是我检查了两个占位符,发现是我在36行将y_误写为了y。

可能很多人写在这个例子的时候没有遇到什么问题,但我觉得遇到问题也不是坏事,遇到问题,解决问题,能理解的更多一些。

记录MNIST实现与理解的更多相关文章

  1. 记录MNIST采用卷积方式实现与理解

    从时间上来说,这篇文章写的完了,因为这个实验早就做完了:但从能力上来说,这篇文章出现的早了,因为很多地方我都还没有理解.如果不现在写,不知道什么时候会有时间是其一,另外一个原因是怕自己过段时间忘记. ...

  2. Bootstrap 我的学习记录3 导航条理解

    以下理论内容copy自Bootstrap中文网 (一个不错的bootstrap学习网站) 导航条 默认样式的导航条 导航条是在您的应用或网站中作为导航页头的响应式基础组件.它们在移动设备上可以折叠(并 ...

  3. SPU、SKU、ARPU是什么,我来记录一下我的理解

    在电商系统里经常会提到“商品”.“单品”.“SPU”.“SKU”这几个词,那么这几个词到底是什么意思呢? 既然不知道是什么,那么我们就查一下:SPU = Standard Product Unit ( ...

  4. Spring学习记录(十二)---AOP理解和基于注解配置

    Spring核心之二:AOP(Aspect Oriented Programming) --- 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软 ...

  5. Mybatis学习记录(三)----理解SqlMapConfig.xml文件

    SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) typeAliases( ...

  6. TensorFlow使用记录 (二): 理解tf.nn.conv2d方法

    方法定义 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC&quo ...

  7. 初步理解JNDI

    今天初步学习了jndi的基本原理,主要是 学习了收藏中的一篇博文,讲的很好,现在记录一下自己的理解. 其实jndi就和jdbc很相似, 我们希望通过相同的jdbc api来访问不同的数据库,就必须提供 ...

  8. 深入理解Linux中内存管理

    前一段时间看了<深入理解Linux内核>对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看 ...

  9. nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战

    前天在玩OLED时想完成一直想弄得一个东西,就是简单的单片机游戏.因为STM32和nRF51822的内存足够,所以就用缓存数组的方法来显示图像(我也不知道术语是啥,反正就是在内存中建立一个128X64 ...

随机推荐

  1. 【报错】Validation failed for object='userLogin'. Error count: 1

    提交表单之后: Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing ...

  2. Linux libOpenThreads库链接冲突错误

    最近在linux 上安装了3.7.0版本的OpenSceneGraph,而在安装之前没有完全卸载之前安装的3.6.3版本,导致在编译程序链接时出现库引用冲突,在便以后出现以下警告信息: /usr/bi ...

  3. 2019Android阿里&腾讯&百度&字节面试汇总(附面试题总结、Android书单)

    1.基本情况 先简单说说我今年的面试经历吧,本人2018届211软件工程硕士生,Android开发岗.此文主要是2019年年初春招的面试和秋招面试经验汇总,最终拿到了阿里,腾讯,字节跳动,百度等off ...

  4. hdu6333 Problem B. Harvest of Apples(组合数+莫队)

    hdu6333 Problem B. Harvest of Apples 题目传送门 题意: 求(0,n)~(m,n)组合数之和 题解: C(n,m)=C(n-1,m-1)+C(n-1,m)    设 ...

  5. vue iview分页

    距离上次博客更新已经快一个月了,期间也有想法在空闲的时候更新几篇博文. 燃鹅,最近懒癌作祟,丢掉的东西越来越多,再不遏止的话就真成癌了. 趁着刚看完一篇心灵鸡汤,让打满鸡血的我总结下前段时间用到的iv ...

  6. 测试微信小程序页面的生命周期

    前言:本人是一个初学者,也是第一次写博客,敲键盘的时候还不知道发布后是什么效果,希望内容给其他初学的同学一点帮助,同时加深自己的理解.这篇随笔讲的是Page页面的生命周期,在开发中是基础中的基础,很容 ...

  7. rpm2cpio - 从 RPM 软件包中提取 cpio 归档

    SYNOPSIS rpm2cpio [filename] DESCRIPTION rpm2cpio 将指定的一个 .rpm 文件转换为一个 cpio 文档,输出到标准输出.如果给出了 `-' 参数,那 ...

  8. BJSV-P-003高清智能卡口系统

    高清智能卡口系统 捕获率99%,车牌识别率98%   ■ 道路安装示意图 ■ 系统结构 ■      抓拍实例 北京太速科技有限公司在线客服:QQ:448468544 淘宝网站:orihard.tao ...

  9. 二、Ajax请求MVC中数据查询表返回datatable

    一.Ajax请求MVC中数据查询表返回datatable 解决方式 返回list

  10. [算法学习]开始leetcode之旅

    在此记录一下用javascript刷leetcode的过程,每天都要坚持! 1.Two Sum Given an array of integers, find two numbers such th ...