各種子產品各種函數一一查詢,還是不是很了解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:操作的名稱(可選,也就是愛寫不寫).
執行個體:
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的廢棄的名稱.
執行個體:
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的不支援使用的名稱.
執行個體:
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:操作的名稱(可選,也就是愛寫不寫).
執行個體:
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:操作的名稱(可選,也就是愛寫不寫).
執行個體:
6、tensorflow.exp()
格式:exp(x,name=None )
意義:計算x元素的指數。(y = e ^ x )。
參數解析:x:A Tensor。必須是下列類型之一:half,float32,float64,complex64,complex128。
name:操作的名稱(可選,也就是愛寫不寫)。
執行個體:
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手寫數字分類問題(進階篇)