深度學習05-keras實例mnist手寫數字識別實例分步驟詳解

數據準備

直接導入數據集mnist,把訓練集和測試集導入。

from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()

數據集介紹

print('圖像數據格式:',X_train.shape)
print('訓練集:%2.0f,測試集:%3.0f' % (X_train.shape[0],X_test.shape[0]))

在這裏插入圖片描述
訓練集一共60000條數據集,測試集一共包含10000數據集,每條記錄是2828的格式。圖像由2828個像素點(灰度值)構成。
在這裏插入圖片描述

import matplotlib.pyplot as plt
plt.imshow(X_train[6])
plt.imshow(X_train[6],cmap = 'Greys')

#畫20個樣本
for i in range(20):
    plt.subplot(4,5,i+1)
    plt.imshow(X_train[i])
#把橫縱座標標籤去掉
for i in range(20):
    plt.subplot(4,5,i+1)
    plt.imshow(X_train[i])
    plt.xticks([])
    plt.yticks([])
#更改顏色
for i in range(20):
    plt.subplot(4,5,i+1)
    plt.imshow(X_train[i],cmap = 'Reds')#Blues
    plt.xticks([])
    plt.yticks([])

#畫出值爲5的前15個樣本
fig = plt.figure(figsize = (8,5))
for i in range(15):
    ax = fig.add_subplot(3,5,i+1,xticks = [],yticks = [])
    ax.imshow(X_train[y_train ==5][i],cmap = 'Greys')

在這裏插入圖片描述
這個 是畫出前15個因變量爲5的值
在這裏插入圖片描述

數據整理

輸入維度爲(num,28,28),需要把後面的維度拼接起來,變換成784維。
將因變量轉換爲啞變量組

X_train = X_train.reshape(X_train.shape[0],
                          X_train.shape[1] * X_train.shape[2])
X_test = X_test.reshape(X_test.shape[0],
                        X_test.shape[1]*X_test.shape[2])
X_train[0].shape

#將因變量轉換爲啞變量組
from keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

建立模型

第一步選擇模型

#定義模型
from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
from keras.optimizers import SGD
import numpy

#第一步選擇模型 
model = Sequential()

第二步:構建網絡層

model.add(Dense(500,input_shape = (784,)))#輸入層,784
model.add(Activation('tanh'))#激活函數是tanh
model.add(Dropout(0.5))#50%節點連接Dropout

model.add(Dense(300))#隱藏層節點300個
model.add(Activation('tanh'))#激活函數是tanh
model.add(Dropout(0.5))#50%節點連接Dropout

model.add(Dense(10))#輸出10個結果,因變量維度爲10
model.add(Activation('softmax'))#最後一層激活函數是tanh

#網絡連接權重數:(784+1)*500+(500+1)*300+(300+1)*10
model.summary()

第三步:編譯

#優化函數,設定學習等參數n
sgd = SGD(lr = 0.01,decay = 1e-e,momentum = 0.9,nesterov = True)
model.compile(loss = 'categorical_crossentropy',
              optimizer = sgd,
              metrics = ['accuracy'])
#模型訓練
from keras.callbacks import ModelCheckpoint

checkpoint = ModelCheckpoint(r'F:\learning_kecheng\deenlearning\NEW\all_zjwj\mnist_BPbest.hdf5',
                                  monitor = 'val_acc',
                                  save_best_only=True,
                                  verbose = 1)

第四步:訓練

model.fit(X_train,y_train,batch_size = 200,epochs = 100,
          shuffle = True,verbose = 1,
          validation_data = (X_test,y_test),
          callbacks = [checkpoint])
model.save(r'F:\learning_kecheng\deenlearning\NEW\all_zjwj\mnist_BPbest.hdf5')
from keras.models import load_model
model = load_model(r'F:\learning_kecheng\deenlearning\NEW\all_zjwj\mnist_BPbest.hdf5')

第五步:模型評估

score = model.evaluate(X_test,y_test, batch_size = 200,verbose = 1)
print('測試集損失函數:%f,預測準確率:%2.2f%%'%(score[0],score[1]*100))

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