5、keras神經網絡,Sequential序貫模型(二分類、多分類)

1 Sequential參數

model = Sequential()

model.add(Dense(32, input_dim=78))

解釋:

Sequential 的第一個關於輸入數據shape的參數,後邊的各個層則可以自動推到出中間數據的shape

01 傳遞一個input_shape的關鍵字參數給第一層,如果填入None則表示此位置可能是任何正整數。數據的batch大小不應包含在其中。

02  有些2D層,如Dense,支持通過指定其輸入維度input_dim來隱含的指定輸入數據shape,是一個Int類型的數據。一些3D的時域層支持通過參數input_dim和input_length來指定輸入shape。

03  如果你需要爲輸入指定一個固定大小的batch_size(常用於stateful RNN網絡),可以傳遞batch_size參數到一個層中,例如你想指定輸入張量的batch大小是32,數據shape是(6,8),則你需要傳遞batch_size=32和input_shape=(6,8)。
 

2、compile配置學習過程

model.compile(optimizer='rmspropy',loss='categorical_crossentropy',metrics=['accuracy'])

01 優化器optimizer:

         該參數可指定爲已預定義的優化器名,如rmsprop、adagrad,或一個Optimizer類的對象。

02  損失函數loss:

         該參數爲模型試圖最小化的目標函數,它可爲預定義的損失函數名,如categorical_crossentropy、mse,也可以爲一個損失函數。

03  指標列表metrics:

         對分類問題,我們一般將該列表設置爲metrics=['accuracy']。指標可以是一個預定義指標的名字,也可以是一個用戶定製的函數.指標函數應該返回單個張量,或一個完成metric_name - > metric_value映射的字典.

3、案例

01 基於多層感知器Softmax多分類(圖片) 

from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation
from keras.optimizers import SGD
import keras #abd

# Generate dummy data
import numpy as np

x_train=np.random.random((1000,20))
y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10)
x_test=np.random.random((100,20))
y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)

model=Sequential()

# Dense(64) is a fully-connected Layer with 64 hidden units.
# in the first layer ,you must specify the expected input data shape;
# here,20-dimensional vectors.

model.add(Dense(64,activation='relu',input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))

sgd=SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)

model.compile(loss='categorical_crossentropy', # 損失函數
              optimizer=sgd, # 
              metrics=['accuracy'] # 精確度,評估模型在訓練和測試時的網絡性能的指標。
              ) 

model.fit(x_train,y_train,epochs=20,batch_size=128) 

# batch_size 整數,指定進行梯度下降時每個批次包含的樣本數訓練時一個批次的樣本
# 會被計算一次梯度下降,使目標函數進行一步優化
# epochs;訓練20次,整數,訓練終止時候的epoch值
score=model.evaluate(x_test,y_test,batch_size=128)

# 評估函數 ,本函數返回一個測試誤差的標量值(如果模型沒有其他評價指標)。

 

02  MLP的二分類

import numpy as np
from keras.models import Sequential
from keras.layers import Dense,Dropout

x_train=np.random.random((1000,20))
y_train=keras.utils.to_categorical(np.random.randint(10,size=(1000,1)),num_classes=10)
x_test=np.random.random((100,20))
y_test=keras.utils.to_categorical(np.random.randint(10,size=(100,1)),num_classes=10)


model=Sequential()
model.add(Dense(64,input_dim=20,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x_train,y_train,
          epoches=20,
          batch_size=128)

score=model.evaluate(x_test,y_test,batch_size=128)

相關詳細說明見官方文檔:https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/

 

 

 

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