歡迎您光臨本站 註冊首頁

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

←手機掃碼閱讀     techdo @ 2020-06-28 , reply:0

在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, input_shape = (784,)))  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',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/


   


[techdo ] Keras中的兩種模型:Sequential和Model用法已經有548次圍觀

http://coctec.com/docs/python/shhow-post-240058.html