其實我也不知道名字是啥意思???
第一步,安裝VMTOOLs,先下載到虛擬機,再安裝
命令行sudo pip install+文件拖過來,就會自己安裝了,哈哈哈超帥氣
第二步,下載MNIST到虛擬機,好像tensorflow中文社區(qū)的MNIST出了毛病,所以自行百度MNIST數(shù)據(jù)集,我是在一個超級像假網(wǎng)站的網(wǎng)站下載的,還下載了input_data.py文件,作用是下載用于訓練和測試的MNIST數(shù)據(jù)集的源碼
https://blog.csdn.net/u012348655/article/details/62045803
https://blog.csdn.net/wuzhichenggo/article/details/79332128
http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_download.html
(參考文獻???。。。嗯,算是吧。。)
第三步,輸入
import tensorflow.examples.tutorials.mnist.input_data as input_data#導入tensorflow包
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)#輸出MNIST的四個圖像集
import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 784])#創(chuàng)建一個操作符號變量,來描述這些可交互的操作單元,x不是特定值,是一個占位符placeholder,我們在TensorFlow運行計算時輸入這個值。我們希望能夠輸入任意數(shù)量的MNIST圖像,每一張圖展平成784維的向量。我們用2維的浮點數(shù)張量來表示這些圖,這個張量的形狀是[None,784 ]。(這里的None表示此張量的第一個維度可以是任何長度的。)
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10])+0.1)#Variable表示權(quán)重值和偏置量。一個Variable代表一個可修改的張量,存在在TensorFlow的用于描述交互性操作的圖中。可以用于計算輸入值,也可以在計算中被修改。Variable也可以表示各種機器學習應用中的模型參數(shù)。
我們賦予tf.Variable不同的初值來創(chuàng)建不同的Variable:在這里,我們都用全為零的張量來初始化W和b。因為我們要學習W和b的值,它們的初值可以隨意設置。注意,W的維度是[784,10],因為我們想要用784維的圖片向量乘以它以得到一個10維的證據(jù)值向量,每一位對應不同數(shù)字類。b的形狀是[10],所以我們可以直接把它加到輸出上面。
y = tf.nn.softmax(tf.matmul(x,W) + b)#實現(xiàn)模型,tf.matmul(??X,W)表示x乘以W,此處x是一個2維張量擁有多個輸入。然后再加上b,把和輸入到tf.nn.softmax函數(shù)里面
y_ = tf.placeholder("float", [None,10])#添加一個新的占位符用于輸入正確值,方便計算交叉熵
cross_entropy = -tf.reduce_sum(y_*tf.log(y))#計算交叉熵,首先,用?tf.log?計算?y?的每個元素的對數(shù)。然后,把?y_?的每一個元素和?tf.log(y)?的對應元素相乘。最后,用?tf.reduce_sum?計算張量的所有元素的總和。(注意,這里的交叉熵不僅僅用來衡量單一的一對預測和真實值,而是所有100幅圖片的交叉熵的總和。對于100個數(shù)據(jù)點的預測表現(xiàn)比單一數(shù)據(jù)點的表現(xiàn)能更好地描述我們的模型的性能。
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)#要求TensorFlow用梯度下降算法以0.01的學習速率最小化交叉熵
init = tf.global_variables_initializer()#初始化變量
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})#訓練模型,讓模型循環(huán)訓練1000次
隨機抓取訓練數(shù)據(jù)中的100個批處理數(shù)據(jù)點,用這些數(shù)據(jù)點作為參數(shù)替換之前的占位符來運行train_step。
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))#首先找出預測正確的標簽。tf.argmax 能給出某個tensor對象在某一維上的其數(shù)據(jù)最大值所在的索引值。由于標簽向量是由0,1組成,因此最大值1所在的索引位置就是類別標簽,比如tf.argmax(y,1)返回的是模型對于任一輸入x預測到的標簽值,而?tf.argmax(y_,1)?代表正確的標簽,我們可以用?tf.equal?來檢測我們的預測是否真實標簽匹配(索引位置一樣表示匹配)。
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))#這行代碼會給我們一組布爾值。為了確定正確預測項的比例,我們可以把布爾值轉(zhuǎn)換成浮點數(shù),然后取平均值。例如,[True, False, True, True]?會變成?[1,0,1,1]?,取平均值后得到?0.75.
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))#計算所學習到的模型在測試數(shù)據(jù)集上面的正確率
最后輸出結(jié)果0.9189
