TFboy养成记 MNIST Classification (主要是如何计算accuracy)

参考:莫烦。

主要是运用的MLP。另外这里用到的是批训练:

这个代码很简单,跟上次的基本没有什么区别。

这里的lossfunction用到的是是交叉熵cross_entropy.可能网上很多形式跟这里的并不一样。

这里一段时间会另开一个栏。专门去写一些机器学习上的一些理论知识。

这里代码主要写一下如何计算accuracy:

1 def getAccuracy(v_xs,v_ys):
2     global y_pre
3     y_v = sess.run(y_pre,feed_dict={x:v_xs})
4     correct_prediction = tf.equal(tf.arg_max(y_v,1),tf.arg_max(v_ys,1))
5     accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
6     result = sess.run(accuracy,feed_dict={x:v_xs,y:v_ys})
7
8     return result

首先得到ground truth,与预测值,然后对着预测值得到tf,arg_max---->你得到的是以float tensor,tensor上的各个值是各个分类结果的可能性,而argmax函数就是求里面的最大值的下表也就是结果。

注意这里每次得到的是一个batch的结果,也就是说以一个【9,1,2,、。。。。】的这种tensor,所以最后用tf.equal得到一个表示分类值与实际类标是否相同的Bool型tensor。最后把tensor映射到0,1,两个值上就可以了.

可能会有人问为什么不用int表示而是用float32来表示呢?因为下面腰酸的是准确率,如果是int32,那么按tensorflow的整数除法运算是直接取整数部分不算小数点的。(这几个涉及到的函数在之前的博客)

全部代码:

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Sun Jun 18 15:31:11 2017
 4
 5 @author: Jarvis
 6 """
 7
 8 import tensorflow as tf
 9 import numpy as np
10 from tensorflow.examples.tutorials.mnist import input_data
11
12 def addlayer(inputs,insize,outsize,activate_func = None):
13     W = tf.Variable(tf.random_normal([insize,outsize]),tf.float32)
14     b = tf.Variable(tf.zeros([1,outsize]),tf.float32)
15     W_plus_b = tf.matmul(inputs,W)+b
16
17     if activate_func == None:
18         return W_plus_b
19     else:
20         return activate_func(W_plus_b)
21 def getAccuracy(v_xs,v_ys):
22     global y_pre
23     y_v = sess.run(y_pre,feed_dict={x:v_xs})
24     correct_prediction = tf.equal(tf.arg_max(y_v,1),tf.arg_max(v_ys,1))
25
26     accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
27     result = sess.run(accuracy,feed_dict={x:v_xs,y:v_ys})
28
29     return result
30 mnist = input_data.read_data_sets(‘MNIST_data‘, one_hot=True)
31
32 x  = tf.placeholder(tf.float32,[None,784])
33 y = tf.placeholder(tf.float32,[None,10])
34 #h1 = addlayer(x,784,14*14,activate_func=tf.nn.softmax)
35 #y_pre = addlayer(h1,14*14,10,activate_func=tf.nn.softmax)
36 y_pre = addlayer(x,784,10,activate_func=tf.nn.softmax)
37
38 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y*tf.log(y_pre),reduction_indices=[1]))
39 train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
40
41 sess = tf.Session()
42 sess.run(tf.global_variables_initializer())
43 for i in range(10001):
44     x_batch,y_batch = mnist.train.next_batch(100)
45     sess.run(train_step,feed_dict={x:x_batch,y:y_batch})
46
47     if i % 100 == 0:
48         print (getAccuracy(mnist.test.images,mnist.test.labels))
49     

时间: 2024-10-23 14:12:55

TFboy养成记 MNIST Classification (主要是如何计算accuracy)的相关文章

TFboy养成记 CNN

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sun Jul 2 19:59:43 2017 4 5 @author: Administrator 6 """ 7 import tensorflow as tf 8 import numpy as np 9 from tensorflow.examples.tutorials.mnist import input_data 10 11 def compu

TFBOY 养成记 一些比较好多文章。

API解释中文版(简书文章,没事看看): http://www.jianshu.com/p/e3a79eac554f Tensorlfow op辨异:tf.add()与tf.nn.bias_add()区别: http://blog.csdn.net/lanchunhui/article/details/66477742

TFboy养成记 简单小程序(Variable & placeholder)

学习参考周莫烦的视频. Variable:主要是用于训练变量之类的.比如我们经常使用的网络权重,偏置. 值得注意的是Variable在声明是必须赋予初始值.在训练过程中该值很可能会进行不断的加减操作变化. placeholder:也是用于存储数据,但是主要用于feed_dict的配合,接收输入数据用于训练模型等.placeholder值在训练过程中会不断地被赋予新的值,用于批训练,基本上其值是不会轻易进行加减操作. placeholder在命名时是不会需要赋予值得,其被赋予值得时间实在feed_

TFboy养成记 tf.cast,tf.argmax,tf.reduce_sum

referrence: 莫烦视频 先介绍几个函数 1.tf.cast() 英文解释: 也就是说cast的直译,类似于映射,映射到一个你制定的类型. 2.tf.argmax 原型: 含义:返回最大值所在的坐标.(谁给翻译下最后一句???) ps:谁给解释下axis最后一句话? 例子: 3.tf.reduce_mean() 原型: 含义:一句话来说就是对制定的reduction_index进行均值计算. 注意,reduction_indices为0时,是算的不同的[]的同一个位置上的均值 为1是是算

TFboy养成记 多层感知器 MLP

内容总结与莫烦的视频. 这里多层感知器代码写的是一个简单的三层神经网络,输入层,隐藏层,输出层.代码的目的是你和一个二次曲线.同时,为了保证数据的自然,添加了mean为0,steddv为0.05的噪声. 添加层代码: def addLayer(inputs,inSize,outSize,activ_func = None):#insize outsize表示输如输出层的大小,inputs是输入.activ_func是激活函数,输出层没有激活函数.默认激活函数为空 with tf.name_sco

TFboy养成记 tensorboard

首先介绍几个用法: with tf.name_scope(name = "inputs"): 这个是用于区分区域的.如,train,inputs等. xs = tf.placeholder(tf.float32,[None,1],name = "x_input") name用于对节点的命名. merged = tf.summary.merge_all() 注:这里很多代码可能跟莫烦老师的代码并不一样,主要是由于版本变迁,tensorflow很多函数改变. 这一步很重

前端工程师养成记:开发环境搭建(Sublime Text必备插件推荐)

为了让自己更像一个前端工程师,决定从开发环境开始武装自己.本文将介绍前段工程师开发的一些利器的安装步骤,主要包括了: 1.Node.js的安装 2.Grunt的安装及常用插件 3.Sublime Text的安装及必备插件 一.Node.js的安装 Node.js就是一堆前端工程师捧红的,所以装上这个嘛,主要不是自己需要使用Node.js而是一堆工具对他的依赖. Windows下安装步骤很简单: 1.去到http://nodejs.org/下载最新的安装包,安装. 2.在CMD下运行,node和n

中产阶级养成记:现代人需要的8点能力素养(一)(不服来战,欢迎勾搭)

首先,要说明"中产阶级养成记",这个确实有点"标题党"了.我自认为,关于以下几点的能力素养,对从贫穷晋升到中产阶级方面,有很大帮助,至少我现在是这么想的,也认为是可行的. 自己的家庭或者说家族,本来就是那种平民百姓,在早期属于"农民",最近些年,属于"半农半工","全工"的状态. 作为整个家庭,甚至是家族,几代人中间唯一的一个有较高含金量的"大学生" ,我最想做的事情之一,就是想在经济方

【活动】DevOps直播技术架构养成记

背景 半月前,参加了UCloud直播云的活动,主题"DevOps|直播技术架构养成记",很是不错的.能够整理出本篇博文,非常感谢参加会议的朋友们在微信群中提供的非常好的资料,以作分享. Now, go into! 低延迟.秒开? 网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调,视频直播被赋予了更多娱乐和社交的属性,人们享受随时随地进行直播和观看,主播不满足于单向的直播,观众则更渴望互动,直播的打开时间和延迟变成了影响产品功能发展重要指标.那么,问题来了:如何实现低