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     
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM