之前半个月的时间几乎都在看理论书籍,最近两天开始撸代码,一个跟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. Learning OSG programing---osgShape

    本例示范了osg中Shape ---- 基本几何元素的绘制过程.参照osg官方文档,Shape 类包含以下子类: 在示例程序中,函数createShapes函数用于生成需要绘制的几何形状. osg:: ...

  2. 数据溢出-varchar类型

    数据溢出一.varchar(65535)1.在charset=latin1,因为有额外的开销,实际只能存65532 CREATE table demo( a ) )charset=latin1 eng ...

  3. [Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护 ...

  4. dp(01背包问题)

    且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 小Ho现在手上有M张奖券,而奖品区有N件奖品,分别标号为1到N,其中第i件奖品需要need( ...

  5. C#设计模式:装饰者模式(Decorator Pattern)

    一,装饰者模式(Decorator Pattern):装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. 二,在以上代码中我们是中国人是根本行为,我们给中国人装饰我会说英语 ...

  6. vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin

    场景: . webpack2.4.*集成vue-loader@15.7.2报错 原因: 参考官方文档 https://vue-loader.vuejs.org/migrating.html#a-plu ...

  7. CentOS 7 LNMP环境搭建 Zabbix3.4

    概述:在CentOS 7 64位操作系统环境下搭建LNMP(Linux+Nginx+MySQL+PHP)来运行Zabbix 3.4 监控程序 预先安装: yum install -y autoconf ...

  8. Calendar日历

    Calendar calendar=Calendar.getInstance(); //上一年的今天 calendar.add(Calendar.YEAR,-1); System.out.printl ...

  9. 生成RSA公钥密钥

    非对称加密就不做详细解释了,它的过程简单来说呢,就是A与B通讯,A公布了一个公开密钥,而且A手里还有一个私有的钥匙,叫密钥.B使用A给的公钥将内容进行加密,然后传递给A.A拿到加密后的内容后,用私钥解 ...

  10. HTML5 canvas绘制图形

    demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...