Keras上實現Softmax迴歸模型
一、分類神經網路構建過程
本例程是在MNIST資料集,構建一個簡單分類神經網路,實現對0-9這10個數字的分類。
1.資料預處理
Keras 自身包含 MNIST 這個資料集,再分成訓練集和測試集。x 是一張張圖片,y 是每張圖片對應的標籤,即它是哪個數字。輸入的 x 變成 60,000*784 的資料,然後除以 255 進行標準化,標準化之後就變成了(0, 1)之間。對於 y,要用到 Keras 改造的 numpy 的一個函式 np_utils.to_categorical,把 y 變成了 one-hot 的形式,即之前 y 是一個數值, 在 0-9 之間,現在是一個大小為10 的向量,其屬於哪個數字,就在那個位置為 1,其他位置都是 0。
這裡有一點需要注意的地方就是np_utils.to_categorical()中的引數nb_classes在Keras 2中變更為num_classes,這事一出新特性變更,使用不同版本的時候務必注意修改。
2.構建神經網路模型
本例中使用了一種更為簡潔的構建神經網路模型的方法,即在初始化Sequential時直接將模型的各個層依次放入一個list中。第一段就是加入 Dense 神經層。32 是輸出的維度,784 是輸入的維度。第一層傳出的資料有 32 個 feature,傳給激勵單元,激勵函式用到的是 relu 函式。經過激勵函式之後,就變成了非線性的資料。然後再把這個資料傳給下一個神經層,這個 Dense 我們定義它有 10 個輸出的 feature。同樣的,此處不需要再定義輸入的維度,因為它接收的是上一層的輸出。接下來再輸入給下面的 softmax 函式,用來分類。接下來自定義RMSprop優化器。然後用 model.compile 激勵神經網路。優化器,可以是預設的,也可以是我們在上一步定義的。損失函式,分類和迴歸問題的不一樣,用的是交叉熵。 metrics,裡面可以放入需要計算的 cost,accuracy,score 等。
3.訓練模型
本例中用到的訓練函式是fit()函式,在這裡也產生了Keras 2的一個新特性,就是fit()函式的訓練次數nb_epoch屬性變更為epochs,使用時多加註意。batch_size表示每批訓練的大小。fit()有很強大的動態顯示功能,會動態顯示每次訓練的過程、剩餘時間、loss值、accuracy值等,非常直觀。
4.測試模型
測試模型與之前的方法類似,請參看之前的博文Keras上實現簡單線性迴歸模型。
二、完整程式
import numpy as np
np.random.seed(1337) # for reproducibility
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
# X shape (60,000 28x28), y shape (10,000, )
(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.
#轉換為one_hot形式
#keras_v1 y_train = np_utils.to_categorical(y_train, nb_classes=10)
#keras_v1 y_test = np_utils.to_categorical(y_test, nb_classes=10)
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)
# 構建模型階段
# 一次性搭建神經網路模型的方法,注意是將模型元素放在一個list中
model = Sequential([
Dense(32, input_dim=784),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
# 啟用模型
# 自定義RMS優化器
rmsprop = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(optimizer=rmsprop,
loss='categorical_crossentropy',
metrics=['accuracy'])
#訓練階段
print('Training ------------')
model.fit(X_train, y_train, epochs=10, batch_size=32) #keras_v1 epochs 2 nb_epoch
#測試階段
print('\nTesting ------------')
loss, accuracy = model.evaluate(X_test, y_test)
print('test loss: ', loss)
print('test accuracy: ', accuracy)
相關文章
- tf.keras實現邏輯迴歸和softmax多分類Keras邏輯迴歸
- Logistic迴歸、softmax迴歸以及tensorflow實現MNIST識別
- Softmax迴歸簡介
- 利用TensorFlow實現線性迴歸模型模型
- 利用Tensorflow實現邏輯迴歸模型邏輯迴歸模型
- tf.keras實現線性迴歸和多層感知器Keras
- 實驗11-使用keras完成邏輯迴歸Keras邏輯迴歸
- 實驗10-使用keras完成線性迴歸Keras
- 2-7實戰迴歸模型模型
- ML-邏輯迴歸-Softmax-交叉熵(小航)邏輯迴歸熵
- 邏輯迴歸模型邏輯迴歸模型
- python實現線性迴歸之簡單迴歸Python
- 數值解和解析解/softmax迴歸/泰勒展開/牛頓法
- 多元線性迴歸模型模型
- TensorFlow實現線性迴歸
- 【機器學習】線性迴歸sklearn實現機器學習
- pytorch實現線性迴歸PyTorch
- 【動手學深度學習】第三章筆記:線性迴歸、SoftMax 迴歸、交叉熵損失深度學習筆記熵
- 【Keras篇】---Keras初始,兩種模型構造方法,利用keras實現手寫數字體識別Keras模型構造方法
- Keras上實現AutoEncoder自編碼器Keras
- PRML 迴歸的線性模型模型
- 迴歸模型-評估指標模型指標
- 對數機率迴歸(邏輯迴歸)原理與Python實現邏輯迴歸Python
- 使用 Python 在 Linux 上實現一鍵迴歸測試PythonLinux
- Python機器學習筆記:使用Keras進行迴歸預測Python機器學習筆記Keras
- 線性迴歸 go 語言實現Go
- 【機器學習】多項式迴歸sklearn實現機器學習
- 歸併排序的非遞迴實現排序遞迴
- 【機器學習】線性迴歸python實現機器學習Python
- 讓業務實現迴歸資料庫資料庫
- Keras上實現卷積神經網路CNNKeras卷積神經網路CNN
- 一元線性迴歸模型模型
- Spark 線性迴歸模型異常Spark模型
- Python TensorFlow深度神經網路迴歸:keras.SequentialPython神經網路Keras
- 【TensorFlow篇】--Tensorflow框架實現SoftMax模型識別手寫數字集框架模型
- 歸一化(softmax)、資訊熵、交叉熵熵
- 【機器學習】多項式迴歸python實現機器學習Python
- Pytorch 實現簡單線性迴歸PyTorch