數據準備
直接導入數據集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))