最近學習神經網路,tensorflow,看了好多視頻,查找了好多資料,感覺東西都沒有融入自己的思維中。今天用tensorflow2.0寫了一個MNIST手寫體的版本,記錄下學習的過程。 復現手寫體識別的基本步驟:準備數據,處理數據,搭建模型,迭代訓練模型,使用模型。 一、全連接模型 1、導入數據集( ...
最近學習神經網路,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 模型運行結果圖示