天天看點

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

各種子產品各種函數一一查詢,還是不是很了解MNIST手寫數字分類問題(基礎篇)的實作,作為菜雞先記錄下來,留作以後複盤使用。廢話不多說,先進入正題。

一、執行個體代碼

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

當然我是一個比較懶的人,為了防止下次還需要重新手敲代碼,是以這裡肯定會貼一個源代碼的。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
#引入子產品和官方minist執行個體
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
#下載下傳測試資料和訓練資料,存放在同py檔案MNIST_data檔案夾中
x = tf.placeholder("float", [None, 784])
#插入一個張量占位符x
W = tf.Variable(tf.zeros([784,10]))
#定義圖變量w為一個以0.填充的784x10的數組
b = tf.Variable(tf.zeros([10]))
#定義圖變量b為一個以0.填充的1x10的數組
y = tf.nn.softmax(tf.matmul(x,W) + b)
#x,w數組相乘再加上b做softmax運算
y_ = tf.placeholder("float", [None,10])
#插入一個張量占位符y_
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
#各次元上之和取反(計算交叉熵)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
#tensorflow用梯度下降算法以0.01的學習率最小化交叉熵
init = tf.initialize_all_variables()
#添加操作來初始化建立的變量
sess = tf.Session()
sess.run(init)
#啟動模型,初始化變量
for i in range(1000):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
        #随機抓取訓練資料中的100個批處理資料點替換掉占位符來運作train_step
        correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
        #計算1在y和y_中的索引号,如果相等則傳回true,否則false
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
        #計算true和false變成1和0後的平均值
        print(i, sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
        #輸出訓練後測試資料的準确率
sess.close()
           

二、子產品函數小解

1、tensorflow.placeholder()

格式:placeholder( dtype, shape=None, name=None )

意義:插入一個張量的占位符,這個張量将一直被提供.不可直接參與計算.

參數解析:dtype:要輸入的張量中元素的類型.

                  shape:要輸入的張量的形狀(可選).如果未指定形狀,則可以輸入任何形狀的張量.

                  name:操作的名稱(可選,也就是愛寫不寫).

執行個體:

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

2、tensorflow.reduce_sum()

格式:reduce_sum (     input_tensor ,     axis = None ,     keep_dims = False ,     name = None ,     reduction_indices = None  )

意義:計算一個張量的各個次元上元素的總和

參數解析:input_tensor:要減少的張量.應該有數字類型.

                 axis:要減小的尺寸.如果為None(預設),則縮小所有尺寸.必須在範圍[-rank(input_tensor), rank(input_tensor))内.                           keep_dims:如果為true,則保留長度為1的縮小尺寸

                name:操作的名稱(可選,也就是愛寫不寫).

                reduction_indices:axis的廢棄的名稱.

執行個體:

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

3、tensorflow.reduce_mean()

格式:reduce_mean( input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None )

意義:計算張量各個次元上元素的平均值.

參數解析:input_tensor:要減少的張量.應該有數字類型.

                  axis:要減小的尺寸.如果為None(預設),則減少所有次元.必須在[-rank(input_tensor), rank(input_tensor))範圍内.                            keep_dims:如果為true,則保留長度為1的縮小尺寸.

                  name:操作的名稱(可選,也就是愛寫不寫).

                  reduction_indices:axis的不支援使用的名稱.

執行個體:

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

4、tensorflow.equal()

格式:equal( x, y, name=None )

意義:傳回(x == y)元素的真值

參數解析:

x:張量.必須half,float32,float64,uint8,int8,int16,int32,int64,complex64,quint8,qint8,qint32,string,bool,complex128等類型. 

y:張量.必須與 x 的類型一緻.

name:操作的名稱(可選,也就是愛寫不寫).

執行個體:

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

5、tensorflow.argmax()

格式:argmax(input, axis=None, name=None, dimension=None)

意義:傳回張量沿軸最大值的索引,若最大值有重複,則傳回第一個遇到的最大值的索引。

參數解析:

input:張量.必須half,float32,float64,uint8,int8,int16,int32,int64,complex64,quint8,qint8,qint32,string,bool,complex128等類型. 

aixs:尺寸,必須在[0, rank(input_tensor))内,類型為 int32, int64

name:操作的名稱(可選,也就是愛寫不寫).

執行個體:

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

6、tensorflow.exp()

格式:exp(x,name=None )

意義:計算x元素的指數。(y = e ^ x )。

參數解析:x:A Tensor。必須是下列類型之一:half,float32,float64,complex64,complex128。

                  name:操作的名稱(可選,也就是愛寫不寫)。

執行個體:

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

7、tensorflow.nn.softmax()

格式:tf.nn.softmax(logits, axis=None, name=None, dim=None )

意義:計算softmax激活,傳回值為一個Tensor,與logits具有相同的類型和shape。

參數解析:logits:一個非空的Tensor。必須是下列類型之一:half, float32,float64。

                  axis:将在其上執行次元softmax。預設值為-1,表示最後一個次元。

                  name:操作的名稱(可選,也就是愛寫不寫)。

                  dim:axis的已棄用的别名。

softmax解剖:

softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis)       #元素的指數/元素的指數和

執行個體:

一個菜雞的自強之路-MNIST手寫數字分類問題(基礎篇)一、執行個體代碼 二、子產品函數小解

上一篇:一個菜雞的自強之路-線性函數執行個體剖析                    下一篇:一個菜雞的自強之路-MNIST手寫數字分類問題(進階篇)

繼續閱讀