1. 程式人生 > >第一個神經網絡

第一個神經網絡

數據轉換 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

技術分享圖片

第一個神經網絡