Keras——用Keras搭建分類神經網絡

1.前言

今天用 Keras 來構建一個分類神經網絡,用到的數據集是 MNIST,就是 0 到 9 這幾個數字的圖片數據集。

2.用Keras搭建分類神經網絡

2.1.導入必要模塊

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import RMSprop
np.random.seed(42)

2.2.數據預處理

Keras 自身就有 MNIST 這個數據包,再分成訓練集和測試集。x 是一張張圖片,y 是每張圖片對應的標籤,即它是哪個數字。

輸入的 x 變成 60,000*784 的數據,然後除以 255 進行標準化,因爲每個像素都是在 0 到 255 之間的,標準化之後就變成了 0 到 1 之間。

對於 y,要用到 Keras 改造的 numpy 的一個函數 np_utils.to_categorical,把 y 變成了 one-hot 的形式,即之前 y 是一個數值, 在 0-9 之間,現在是一個大小爲 10 的向量,它屬於哪個數字,就在哪個位置爲 1,其他位置都是 0。np_utils.to_categorical將類別向量(從0到nb_classes的整數向量)映射爲二值類別矩陣, 用於應用到以categorical_crossentropy爲目標函數的模型中.

(X_train, y_train),(X_test,y_test) = mnist.load_data()  #返回兩個元組
X_train = X_train.reshape(X_train.shape[0],-1)/255    #歸一化
X_test = X_test.reshape(X_test.shape[0],-1)/255
y_train = np_utils.to_categorical(y_train,num_classes=10)   #to_categorical就是將類別向量轉換爲二進制(只有0和1)的矩陣類型表示。其表現爲將原有的類別向量轉換爲獨熱編碼的形式
y_test = np_utils.to_categorical(y_test,num_classes=10)  

2.3.搭建模型

(1)models.Sequential,用來一層一層一層的去建立神經層;
(2)layers.Dense 意思是這個神經層是全連接層。
(3)layers.Activation 激勵函數。
(4)optimizers.RMSprop 優化器採用 RMSprop,加速神經網絡訓練方法。

在迴歸網絡中用到的是 model.add 一層一層添加神經層,今天的方法是直接在模型的裏面加多個神經層。好比一個水管,一段一段的,數據是從上面一段掉到下面一段,再掉到下面一段。

第一段就是加入 Dense 神經層。32 是輸出的維度,784 是輸入的維度。 第一層傳出的數據有 32 個 feature,傳給激勵單元,激勵函數用到的是 relu 函數。 經過激勵函數之後,就變成了非線性的數據。 然後再把這個數據傳給下一個神經層,這個 Dense 我們定義它有 10 個輸出的 feature。同樣的,此處不需要再定義輸入的維度,因爲它接收的是上一層的輸出。 接下來再輸入給下面的 softmax 函數,用來分類。

接下來用 RMSprop 作爲優化器,它的參數包括學習率等,可以通過修改這些參數來看一下模型的效果。

model = Sequential([
    Dense(32,input_dim=784),
    Activation('relu'),   #非線性化
    Dense(10),     #輸入32,輸出10
    Activation('softmax')
])
rmsprop = RMSprop(lr=0.001,rho=0.9,epsilon=1e-8,decay=0.0)   #RMSProp 優化器,建議使用優化器的默認參數 (除了學習率 lr,它可以被自由調節)

2.4.激活模型

接下來用 model.compile 激勵神經網絡。

優化器,可以是默認的,也可以是我們在上一步定義的。 損失函數,分類和迴歸問題的不一樣,用的是交叉熵。 metrics,裏面可以放入需要計算的 cost,accuracy,score 等。

model.compile(optimizer=rmsprop,
             loss='categorical_crossentropy',
             metrics=['accuracy'])

2.5.訓練+測試

print('Training.................')  
model.fit(X_train, y_train, epochs=2, batch_size=32)   #訓練
print('\nTesting')
loss, accuracy = model.evaluate(X_test, y_test)   #測試

print('test loss:',loss)
print('test accuracy:',accuracy)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章