第一個神經網絡
阿新 • • 發佈:2019-02-27
數據轉換 utils tor mod plot data ets ini from
1.keras訓練神經網絡的一般步驟
- 導入數據,做數據處理,使數據符合模型要求
- 定義網絡結構
- 定義損失函數、優化器、監控指標
- 訓練模型
- 圖形化
2.使用MNIST數據集的一個例子
from keras.datasets import mnist from keras import models from keras import layers from keras.utils import to_categorical import matplotlib.pyplot as plt #導入數據 (train_x,train_y),(test_x,test_y) = mnist.load_data()#每個神經元表示一個像素,所以把3維數據轉換成2維數據 train_x = train_x.reshape(60000,28*28) train_x = train_x.astype(‘float32‘) /255 test_x = test_x.reshape(10000,28*28) test_x = test_x.astype(‘float32‘) /255 #把數據中類別用向量表示,以便使用交叉熵,6---->[0,0,0,0,0,0,1,0,0,0] train_y = to_categorical(train_y) test_y = to_categorical(test_y) #定義網絡結構 network = models.Sequential()#Dense表示全連接 network.add(layers.Dense(512,activation="relu",input_shape=(28*28,))) network.add(layers.Dense(10,activation="softmax")) #定義損失函數、優化器、監控指標 network.compile(optimizer="rmsprop",loss="categorical_crossentropy",metrics=[‘accuracy‘]) #訓練模型 history = network.fit(train_x,train_y,batch_size=128,epochs=11,validation_data=(test_x,test_y)) history_dict= history.history loss = history_dict[‘loss‘] val_loss = history_dict[‘val_loss‘] acc = history_dict[‘acc‘] val_acc = history_dict[‘val_acc‘] epochs = range(1,11) #loss的圖 plt.subplot(121) plt.plot(epochs,loss,‘g‘,label = ‘Training loss‘) plt.plot(epochs,val_loss,‘b‘,label = ‘Validation loss‘) plt.xlabel(‘Epochs‘) plt.ylabel(‘Loss‘) #顯示圖例 plt.legend() plt.subplot(122) plt.plot(epochs,acc,‘g‘,label = ‘Training accuracy‘) plt.plot(epochs,val_acc,‘b‘,label = ‘Validation accuracy‘) plt.xlabel(‘Epochs‘) plt.ylabel(‘accuracy‘) plt.legend() plt.show()
結果圖如下
可以發現隨著輪數的提升,訓練集的損失在不斷減少,驗證集的損失在輪數為5左右達到了最小;同理隨著輪數提升,訓練集的精度在不斷提升,驗證集的精度在輪數為5左右達到最大;提示我們有可能發生了過擬合,可以把輪數改為5
第一個神經網絡