1. 程式人生 > 程式設計 >Keras中的兩種模型:Sequential和Model用法

Keras中的兩種模型:Sequential和Model用法

在Keras中有兩種深度學習的模型:序列模型(Sequential)和通用模型(Model)。差異在於不同的拓撲結構。

序列模型 Sequential

序列模型各層之間是依次順序的線性關係,模型結構通過一個列表來制定。

from keras.models import Sequential
from keras.layers import Dense,Activation

layers = [Dense(32,input_shape = (784,)),Activation('relu'),Dense(10),Activation('softmax')]

model = Sequential(layers)

或者逐層新增網路結構

from keras.models import Sequential
from keras.layers import Dense,Activation

model = Sequential()
model.add(Dense(32,)))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))

通用模型Model

通用模型可以設計非常複雜、任意拓撲結構的神經網路,例如有向無環網路、共享層網路等。相比於序列模型只能依次線性逐層新增,通用模型能夠比較靈活地構造網路結構,設定各層級的關係。

from keras.layers import Input,Dense
from keras.models import Model

# 定義輸入層,確定輸入維度
input = input(shape = (784,))
# 2個隱含層,每個都有64個神經元,使用relu啟用函式,且由上一層作為引數
x = Dense(64,activation='relu')(input)
x = Dense(64,activation='relu')(x)
# 輸出層
y = Dense(10,activation='softmax')(x)
# 定義模型,指定輸入輸出
model = Model(input=input,output=y)
# 編譯模型,指定優化器,損失函式,度量
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
# 模型擬合,即訓練
model.fit(data,labels)

補充知識: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',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,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,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,epoches=20,batch_size=128)
 
score=model.evaluate(x_test,batch_size=128)

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

以上這篇Keras中的兩種模型:Sequential和Model用法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。