1. 程式人生 > >Tensorflow的MNIST手寫

Tensorflow的MNIST手寫

這段時間以來,一直在學習深度學習機器學習,但總感覺走不進去,有好多基本理論要學習,深度學習有好多框架,例如一些TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4、Lasagne、Neon,如果想了解一些框架的對於,可以關注這個部落格。(借用博主的)我自己學的是tensorflow,雖然看了很多的東西,也照著敲了很多程式碼,但感覺還是少點什麼,於是乎,就在此總結一下自己最近的一個小白歷程:

所有機器學習(深度學習)的基本思路如下:

1.首先需要準備大量的資料(需要機器來學習),獲取資料的方法(也稱資料採集),可以通過爬蟲來進行獲取,也可以在網上尋找資料(購買)。獲取資料後,還需要進行資料分析和資料清洗,獲取的資料可能存在缺失值,並且可能不是你想要的格式,需要修改,在這裡需要用的一些技術(python的numpy和pandas(對於資料的處理和分析,這是python自帶的強大的庫,學習機器學習這些也是一個基礎))。資料準備好以後還要進行整理,需要有訓練集和測試集(還可以有驗證集)。每一個訓練集元素都會有一個對應的標籤,這樣為了演算法的優化。

2.接下來就要構建模型,構建模型也就是一個訓練演算法。訓練演算法有線性的和非線性,最開始入門都會學到一個最小二乘法,但由於計算量過大,一般不會使用。作為基礎瞭解就好。如果有需要可以參考這裡。使用最多的是SGD(隨機梯度下降)。

3.使用訓練集進行訓練,進行誤差判斷,構建損失函式,不斷優化演算法,直到正確率達到最高。

4.在使用測試集進行學習器的泛化效能評估,評估方法一般包括三個:留出法,交叉驗證法,自助法。

5.不僅要對這個學習器進行評估,還需要有衡量模型泛化能力的評價標準,也就是效能度量,常用方法:錯誤率與精度、查準率和查全率、ROC(受試者工作特徵)/AUC(ROC曲線下的面積)、代價敏感錯誤率和代價曲線。

好了,不在廢話,開始最基本的程式碼:(程式碼是照著敲寫的,主要是進行思路整理)

(1)呼叫模組,在這裡有一個程式碼,是有關MNIST的資料的使用,你可以選擇呼叫這個程式碼。也可以直接貼程式碼:(在這裡,)


(2)構建迴歸模型:定義x,y進行資料的輸入(申請佔位符),手寫體的畫素灰度為784,設定變數權重和偏置,並對變數進行初始化


(3)對權重和偏置進行初始化,使用卷積和池化


(4)進行卷積和全連線,兩層卷積,每一個函式都在程式碼後有相應的解釋。


(5)輸出層:


(6)訓練資料和進行模型評估:


簡單總結一下:在資料的輸入輸出中,選擇合適的演算法,能使得資料結果更接近真實的答案,因此就需要不斷地優化演算法,增加合適的神經元,增加多層的卷積層(卷積,池化等一些方式),選擇一些合適的激勵函式。不斷進行訓練學習,讓正確率提高。