數據和方法
MNIST數據集是收集的手寫字體,爲單色圖像,共有訓練集60000項,測試數據集10000項。
建模方法我們使用最簡單的神經網絡模型,多層感知器(MLP)。
數據下載和處理
數據下載
Keras已經提供了模塊用於下載數據,通過一下代碼即可完成下載。
### 首先導入程序所需要的庫
import numpy as np
import pandas as pd
from keras.utils import np_utils
np.random.seed(10)
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data() #下載數據
我們可以看下數據的長度。
通過matplotlib繪製圖片看看數據長什麼樣子~
數據處理
數據處理大概分爲以下幾步:
- 圖片是28X28,我們要轉換爲一維的,這樣纔可以作爲我們的輸入層。
- 圖片標準化
- label值換爲one-hot編碼,做爲輸出層。
代碼:
X_train = X_train.reshape(60000,784).astype('float32')
X_test = X_test.reshape(10000,784).astype('float32')
X_train = X_train/255
X_test = X_test/255
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
MLP建模
模型結構
輸入層爲784(28×28)個神經元 ,隱層256個,輸出層爲10。
建立模型
導入相應的庫,建立Sequential模型,然後模型加入Dense神經網絡層(全連接)。具體代碼如下:
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(units=256,
input_dim=784,
kernel_initializer='normal',
activation='relu'))
model.add(Dense(units=10,
kernel_initializer='normal',
activation='softmax'))
我們可以通過summary查看模型的摘要:
訓練模型
model.compile(loss='categorical_crossentropy',
optimizer='adam', metrics=['accuracy'])
train_history = model.fit(x=X_train,
y=y_train,validation_split=0.2,
epochs=10, batch_size=200,verbose=2)
對訓練模型進行可視化: