tensorflow的MNIST教程解析

2022-02-06 13:33:55 字數 2995 閱讀 4989

原址:

eval()函式:計算字串中有效的表示式;將字串轉化為相應的物件;解析字串有效的表示式.

1.interactivesession()和session()的區別

tf.interactivesession()預設自己就是使用者要操作的session,而tf.session()沒有這個預設,因此用eval()啟動計算時需要指明session。

2.tensorflow計算原理

為了在python中進行高效的數值計算,我們通常會使用像numpy一類的庫,將一些諸如矩陣乘法的耗時操作在python環境的外部來計算,這些計算通常會通過其它語言並用更為高效的**來實現。

但遺憾的是,每乙個操作切換回python環境時仍需要不小的開銷。如果你想在gpu或者分布式環境中計算時,這一開銷更加可怖,這一開銷主要可能是用來進行資料遷移。

tensorflow也是在python外部完成其主要工作,但是進行了改進以避免這種開銷。其並沒有採用在python外部獨立執行某個耗時操作的方式,而是先讓我們描述乙個互動操作圖,然後完全將其執行在python外部。這與theano或torch的做法類似。

因此python**的目的是用來構建這個可以在外部執行的計算圖,以及安排計算圖的哪一部分應該被執行。詳情請檢視基本用法中的計算圖表一節。

3.佔位符

x = tf.placeholder("

float

", shape=[none, 784

])y_ = tf.placeholder("

float

", shape=[none, 10])

這裡的xy並不是特定的值,相反,他們都只是乙個佔位符,可以在tensorflow執行某一計算時根據該佔位符輸入具體的值。

4.變數

w = tf.variable(tf.zeros([784,10

]))b = tf.variable(tf.zeros([10]))

我們現在為模型定義權重w和偏置b。可以將它們當作額外的輸入量,但是tensorflow有乙個更好的處理方式:變數。乙個變數代表著tensorflow計算圖中的乙個值,能夠在計算過程中使用,甚至進行修改。在機器學習的應用過程中,模型引數一般用variable來表示。

變數使用前,需要初始化

sess.run(tf.initialize_all_variables())

5.類別**與損失函式

y = tf.nn.softmax(tf.matmul(x,w) + b)

計算回歸模型(**值),向量化後的x和權重矩陣w相乘,加上偏置b,然後計算每個分類的softmax概率值。

cross_entropy = -tf.reduce_sum(y_*tf.log(y))

我們的損失函式是目標類別和**類別之間的交叉熵。y_*tf.log(y)計算的是交叉熵,tf.reduce_sum()求均值.

6.訓練模型

我們已經定義好模型和訓練用的損失函式,那麼用tensorflow進行訓練就很簡單了。因為tensorflow知道整個計算圖,它可以使用自動微分法找到對於各個變數的損失的梯度值。tensorflow有大量內建的優化演算法 這個例子中,我們用最速下降法讓交叉熵下降,步長為0.01.

train_step = tf.train.gradientdescentoptimizer(0.01).minimize(cross_entropy)

這一行**實際上是用來往計算圖上新增乙個新操作,其中包括計算梯度,計算每個引數的步長變化,並且計算出新的引數值。

返回的train_step操作物件,在執行時會使用梯度下降來更新引數。因此,整個模型的訓練可以通過反覆地執行train_step來完成。

for i in range(1000

): batch = mnist.train.next_batch(50

) train_step.run(feed_dict=)

每一步迭代,我們都會載入50個訓練樣本,然後執行一次train_step,並通過feed_dictxy_張量佔位符用訓練訓練資料替代。執行的過程中,插入新的資料.

7.評估模型

先讓我們找出那些**正確的標籤。tf.argmax是乙個非常有用的函式,它能給出某個tensor物件在某一維上的其資料最大值所在的索引值。由於標籤向量是由0,1組成,因此最大值1所在的索引位置就是類別標籤,比如tf.argmax(y,1)返回的是模型對於任一輸入x**到的標籤值,而tf.argmax(y_,1)代表正確的標籤,我們可以用tf.equal來檢測我們的**是否真實標籤匹配(索引位置一樣表示匹配)。

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

這裡返回乙個布林陣列。為了計算我們分類的準確率,我們將布林值轉換為浮點數來代表對、錯,然後取平均值。例如:[true, false, true, true]變為[1,0,1,1],計算出平均值為0.75。整體相似程度.

accuracy = tf.reduce_mean(tf.cast(correct_prediction, "

float

"))

最後,我們可以計算出在測試資料上的準確率,大概是91%。

print accuracy.eval(feed_dict=)

初識Tensorflow 數字識別MNIST

整體流程 1.定義演算法公式 2.定義loss 選定優化器,並制定優化器優化loss 3.迭代資料進行訓練 4.在測試集或驗證集上對準確率進行測評 首先匯入tensorflow 與mnist的input data 用來獲取traning test 包 from tensorflow.examples...

tensorflow之第乙個專案MNIST資料集

首先登陸 耐心等待,網上好慢。放到當前的路徑下 檢視資料集驗證 檢視資料集的驗證標籤 檢視資料集的測試 檢視資料集的測試標籤 from tensorflow.examples.tutorials.mnist import input data mnist input data.read data s...

windows下caffe之訓練mnist

一 參考資料 悠望南山 caffe 學習筆記 一 caffe example 之訓練mnist 二 訓練所需要用到的檔案 1.mnist test lmdb 測試資料集,裡面包括data.mdb和lock.mdb 2.mnist train lmdb 訓練資料集,裡面包括data.mdb和lock....