原址:
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])
這裡的x
和y
並不是特定的值,相反,他們都只是乙個佔位符
,可以在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_dict
將x
和y_
張量佔位符
用訓練訓練資料替代。執行的過程中,插入新的資料.
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....