記錄二:tensorflow2.0寫MNIST手寫體


  最近學習神經網絡,tensorflow,看了好多視頻,查找了好多資料,感覺東西都沒有融入自己的思維中。今天用tensorflow2.0寫了一個MNIST手寫體的版本,記錄下學習的過程。

復現手寫體識別的基本步驟:准備數據,處理數據,搭建模型,迭代訓練模型,使用模型。

 

一、全連接模型  

1、導入數據集(此次編寫運行均在notebook)

  先引入所需模塊,在用tf.keras下載數據

  

  2、分析圖片的大小

  1)用shape查看數量大小;2)通過指定[0][1]來查看具體圖像尺寸,lable存儲的是image對應的數值

  

 

 

 

  3、處理數據

  就將原先的0-9label轉換為獨熱編碼,獨熱編碼即 One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,並且在任意時候,其中只有一位有效。

    

 

  4、構建模型

  1)tf.keras.Sequential()構建一個順序模型(此處模型的層數參照3blueBrown4層)

  2)第一層輸入層是28*28個神經元,由傳入圖像的像素大小決定,Flatten是用來格式化數據的,將數據轉化為一列。

  3)第二層和第三層各16個神經元,激活函數定義為sigmoid

  4)第四層輸出層0-9,一共輸出10個不同的,softmax是概率分布型

  

 

 

 

 5、訓練模型 

  1)model.compile(loss='目標函數', optimizer=optimizer, metrics=['accuracy'])

  2)fit( x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0)

  

  6、圖觀模型

  一百次后,測試集跟訓練集的准確性圖示

二、卷積模型

卷積網絡大體布置為卷積層-池化層-全連接層。基礎知識儲備如何進行卷積前的估算,並且對相關數據進行調整,添加一層channel,確保數據一致性。

       2.1基礎知識儲備(卷積參數參照LeNet-5)

           

 

 

 

       2.2加載並對數據進行處理,與全連接不同的是,對數據還要再添加一層channel,手寫體是黑白圖片,故而設置為1。

      

 

 

 

       2.3參照上面的卷積處理,建立模型,並運行模型

   

 

 

  2.4 模型運行結果圖示

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM