• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      TensorFlow讀取數(shù)據(jù)在簡單圖像識別中的應用

      2019-10-21 07:37:04來學偉
      現(xiàn)代信息科技 2019年12期

      摘 ?要:本文以MNIST數(shù)據(jù)庫為例,用TensorFlow讀取數(shù)據(jù)集中的數(shù)據(jù),并建立一個簡單的圖像識別模型。同時以TensorFlow為工具,寫一個手寫體數(shù)字識別程序,使用的機器方法是Softmax回歸。通過把占位符的值傳遞給會話,計算后運行梯度下降后,可以檢測模型訓練的結果,得到預測的標簽和實際標簽,接下來通過tf.equal函數(shù)來比較它們是否相等,并將結果保存到correct_prediction中。最后,用tf.reduce_mean可以計算數(shù)組中的所有元素的平均值,相當于得到了模型的預測準確率。該模型識別的準確率超過90%,具有一定的推廣價值。

      關鍵詞:MNIST數(shù)據(jù)集;Softmax回歸;訓練模型

      中圖分類號:TP181 ? ? ?文獻標識碼:A 文章編號:2096-4706(2019)12-0098-02

      Abstract:This paper takes the MNIST database as an example,uses TensorFlow to read the data in the data set,and establishes a simple image recognition model.At the same time with TensorFlow tool,write a handwritten number recognition program,using Softmax regression. By passing the value of placeholder to the session,the result of model training can be detected after the gradient descent is run after calculation,and the predicted tag and the actual tag can be obtained. Next,the equality function of tf.equal is used to compare whether they are equal,and the result is saved in correct_prediction. Finally,tf.reduce_mean can be used to calculate the average value of all elements in the array,which is equivalent to the prediction accuracy of the model.The recognition accuracy of the modified model is more than 90%,which has a little promotion value.

      Keywords:MNIST data set;Softmax regression;training model

      0 ?引 ?言

      拍攝手寫的數(shù)字而形成的圖片以及一些相對應的標記共同組成了MNIST數(shù)據(jù)集,這種數(shù)據(jù)集主要包含了兩種類型的圖像,一種是訓練用的圖像,還有一種是測試用的圖像。在原始的MNIST數(shù)據(jù)集中,我們用28行28列的矩陣來表示每一張圖像。而在TensorFlow中,變量mnist.train.images是訓練樣本,它的形狀為(55000,784)。其中,5000是訓練圖像的數(shù)量,單個圖像樣本的維數(shù)為784,也就是說任何一個圖像樣本都被一個有784維的向量來表示(28行乘以28列為784維)。

      1 ?Softmax回歸

      Softmax回歸是一個完整的線性的多類分類模型,事實上它是通過Logistic回歸直接從模型轉化而來的。與之不同的是Logistic回歸模型是一種兩類分類模型,而Softmax模型則是多類分類模型。在手寫數(shù)字圖像識別問題中,總共有10個不同的類別(即從0到9),我們希望對輸入的圖像計算它屬于每個類別的概率。如屬于9的概率為70%,屬于1的概率為10%等。最后模型預測的結果就是概率最大的那個類別。

      Softmax函數(shù)的最核心的作用是對每個不同的類別進行“給分”,然后根據(jù)分值轉化為合理的概率值。例如:一個樣本可能屬于三個類別,第一個類別的打分為a,第二個類別的打分為b,第三個類別的打分為c。打分越高代表屬于這個類別的概率越高,但是打分本身不代表概率,因為打分的值可以是負數(shù),也可以很大,但概率要求值必須在0~1之間,并且三類的概率加起來應該等于l。那么,如何將(a,b,c)轉換成合理的概率值呢?方法就是使用Softmax函數(shù)。

      假設x是單個樣本的特征,W、b是Softmax模型的參數(shù)。在MNIST數(shù)據(jù)集中,x表示輸入的圖像,它是一個784維的向量,W表示一個矩陣,它的形狀為(784,10),b是一個10維的向量,10代表的是類別數(shù)。首先,Softmax模型的是通過各個公式來計算各個不同類別的Logit:

      Logit=WTx+b

      Logit同樣是一個10維的向量,它實際上可以看成樣本對應于各個類別的“打分”。接下來使用Softmax函數(shù)將它轉換成各個類別的概率值:

      y=Softmax(Logit)

      Softmax模型輸出的y代表各個類別的概率,還可以直接用下面的式子來表示整個Softmax模型:

      y=Softmax(WTx+b)

      2 ?Softmax回歸在TensorFlow中的實現(xiàn)

      本文對應的程序為softmax_regression.py,在該程序中,使用TensorFlow定義了一個Softmax模型,實現(xiàn)了MNIST數(shù)據(jù)集的分類。

      除了變量和占位符之外,還創(chuàng)建了一個y=tf.nn.softmax(tf.matmul(x,W)+b)[1]。這個y就是一個依賴x、W、b的Tensor。如果要求TensorFlow計算y的值,那么系統(tǒng)首先會獲取x、W、b的值,再去計算y的值。

      y實際上定義了一個Softmax回歸模型,在此可以嘗試寫出y的形狀。假設輸入x的形狀為(N,784),其中N表示輸入的訓練圖像的數(shù)目。W的形狀為(784,10),b的形狀為(10,1)。那么,Wx+b的形狀是(N,10)。Softmax函數(shù)不改變結果的形狀,所以得到y(tǒng)的形狀為(N,10)。也就是說,一個10維的向量表示y的每一行,表示模型預測的樣本對應到各個類別的概率[2]。

      模型的輸出是y,而實際的標簽為y_,它們應當越相似越好。在Softmax回歸模型中,通常使用“交叉熵”損失來衡量這種相似性[3]。損失越小,模型的輸出就和實際標簽越接近,模型的預測也就越準確。

      在TensorFlow中,這樣定義交叉熵損失:

      Cross_entropy = \tf. reduce_mean(-tf.reduce_sum(y_*tf.log(y)))

      構造完損失之后,下面一步是如何優(yōu)化損失,讓損失減小。這里使用梯度下降法優(yōu)化損失,定義為:

      Train_step=tf.train.GradientDescentOptimizer (0.01).minimize(cross_entropy)

      TensorFlow默認會對所有變量計算梯度。在這里只定義了兩個變量W和b,因此程序將使用梯度下降法對W,b計算梯度并更新它們的值。tf.train.GradientDescentOptimizer(0.01)中的0.01是梯度下降優(yōu)化器使用的學習率(Learning Rate)。

      在優(yōu)化前,必須要創(chuàng)建一個會話(Session),并在會話中對變量進行初始化操作:

      sess = tf.InteractiveSession()

      tf.global_variables_initializer(). run()

      有了會話,就可以對變量W,b進行優(yōu)化了,每次不使用全部訓練數(shù)據(jù),而是每次提取100個數(shù)據(jù)進行訓練,共訓練1000次[4]。batch_xs,batch_ys分別是100個訓練圖像及其對應的標簽。在訓練時,需要把它們放入對應的占位符x,y_中,對應的語句是feed_dict={x:batch_xs,y_:batch_ys}。

      在會話中,不需要系統(tǒng)計算占位符的值,而是直接把占位符的值傳遞給會話。與變量不同的是,占位符的值不會被保存,每次可以給占位符傳遞不同的值。

      運行完梯度下降后,可以檢測模型訓練的結果,模型預測y的形狀是(N,10),而實際標簽y_的形狀是(N,10),其中N為輸入模型的樣本個數(shù)。tf.argmax(y,1)、tf.argmax(y_,1)的功能是取出數(shù)組中最大值的下標,可以用來將獨熱表示以及模型輸出轉換為數(shù)字標簽。假設傳入四個樣本,它們的獨熱表示y_為(需要通過sess.run(y_)才能獲取此Tensor的值):得到了預測的標簽和實際標簽,接下來通過tf.equal函數(shù)來比較它們是否相等,并將結果保存到correct_prediction中。

      即第一個樣本和最后一個樣本預測是正確的,另外兩個樣本預測錯誤??梢杂胻f.cast(correct-prediction,tf.float32)將比較值轉換成float32型的變量,此時True會被轉換成1,F(xiàn)alse會被轉換成0。

      最后,用tf.reduce_mean可以計算數(shù)組中的所有元素的平均值,相當于得到了模型的預測準確率,如[1.,0.,0.,1.]的平均值為0.5,即50%的分類準確率。

      在程序softmax_regression.py中,傳入占位符的值是feed_dict={x:mnist.test.images, y_: mnist.test.labels}。也就是說,使用全體測試樣本進行測試,測試圖片一共有10000張,運行的結果為0.9185,即91.85%的準確率。因為Softmax回歸是一個比較簡單的模型。

      3 ?結 ?論

      本文以MNIST數(shù)據(jù)庫為例,用TensorFlow讀取數(shù)據(jù)集中的數(shù)據(jù),并建立一個簡單的圖像識別模型。同時以TensorFlow為工具,寫一個手寫體數(shù)字識別程序,使用的機器方法是Softmax回歸模型。該模型識別的準確率超過90%,具有一定的推廣價值。

      參考文獻:

      [1] FesianXu.在TensorFlow中自定義梯度的兩種方法 [EB/OL].https://blog.csdn.net/LoseInVain/article/details/83108001,2018-10-19.

      [2] 束陳.基于智能床墊的睡眠健康狀況研究 [D].北京:北京郵電大學,2018.

      [3] BVL10101111. Deep Learning 之最優(yōu)化方法 [EB/OL].https://blog.csdn.net/BVL10101111/article/details/72614711,2017-05-21.

      [4] 高橋耕三,周廣文.靜止衛(wèi)星之間碰撞的概率及其避免方法 [J].國外導彈技術,1984(2):20-32.

      作者簡介:來學偉(1981-),男,漢族,河南靈寶人,工程碩士,講師,主要研究方向:計算機軟件開發(fā)與研究。

      屏南县| 怀柔区| 贵溪市| 迁安市| 平顶山市| 嘉黎县| 合阳县| 阿克| 同仁县| 航空| 徐汇区| 汨罗市| 江安县| 礼泉县| 萨嘎县| 那曲县| 咸宁市| 麻栗坡县| 曲松县| 陆良县| 桂林市| 沙坪坝区| 冷水江市| 益阳市| 禹城市| 安吉县| 湾仔区| 威远县| 安徽省| 深泽县| 旬阳县| 琼结县| 辽阳市| 松桃| 那坡县| 晋中市| 彭州市| 滦平县| 新津县| 建水县| 聂荣县|