Keras中的兩種模型:Sequential和Model用法
在Keras中有兩種深度學(xué)習(xí)的模型:序列模型(Sequential)和通用模型(Model)。差異在于不同的拓?fù)浣Y(jié)構(gòu)。
序列模型 Sequential
序列模型各層之間是依次順序的線性關(guān)系,模型結(jié)構(gòu)通過(guò)一個(gè)列表來(lái)制定。
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)
或者逐層添加網(wǎng)絡(luò)結(jié)構(gòu)
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
通用模型可以設(shè)計(jì)非常復(fù)雜、任意拓?fù)浣Y(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),例如有向無(wú)環(huán)網(wǎng)絡(luò)、共享層網(wǎng)絡(luò)等。相比于序列模型只能依次線性逐層添加,通用模型能夠比較靈活地構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu),設(shè)定各層級(jí)的關(guān)系。
from keras.layers import Input, Dense from keras.models import Model # 定義輸入層,確定輸入維度 input = input(shape = (784, )) # 2個(gè)隱含層,每個(gè)都有64個(gè)神經(jīng)元,使用relu激活函數(shù),且由上一層作為參數(shù) x = Dense(64, activation='relu')(input) x = Dense(64, activation='relu')(x) # 輸出層 y = Dense(10, activation='softmax')(x) # 定義模型,指定輸入輸出 model = Model(input=input, output=y) # 編譯模型,指定優(yōu)化器,損失函數(shù),度量 model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # 模型擬合,即訓(xùn)練 model.fit(data, labels)
補(bǔ)充知識(shí):keras神經(jīng)網(wǎng)絡(luò),Sequential序貫?zāi)P停ǘ诸?lèi)、多分類(lèi))
1 Sequential參數(shù)
model = Sequential() model.add(Dense(32, input_dim=78))
解釋?zhuān)?/p>
Sequential 的第一個(gè)關(guān)于輸入數(shù)據(jù)shape的參數(shù),后邊的各個(gè)層則可以自動(dòng)推到出中間數(shù)據(jù)的shape
01 傳遞一個(gè)input_shape的關(guān)鍵字參數(shù)給第一層,如果填入None則表示此位置可能是任何正整數(shù)。數(shù)據(jù)的batch大小不應(yīng)包含在其中。
02 有些2D層,如Dense,支持通過(guò)指定其輸入維度input_dim來(lái)隱含的指定輸入數(shù)據(jù)shape,是一個(gè)Int類(lèi)型的數(shù)據(jù)。一些3D的時(shí)域?qū)又С滞ㄟ^(guò)參數(shù)input_dim和input_length來(lái)指定輸入shape。
03 如果你需要為輸入指定一個(gè)固定大小的batch_size(常用于stateful RNN網(wǎng)絡(luò)),可以傳遞batch_size參數(shù)到一個(gè)層中,例如你想指定輸入張量的batch大小是32,數(shù)據(jù)shape是(6,8),則你需要傳遞batch_size=32和input_shape=(6,8)。
2、compile配置學(xué)習(xí)過(guò)程
model.compile(optimizer='rmspropy',loss='categorical_crossentropy',metrics=['accuracy'])
01 優(yōu)化器optimizer:
該參數(shù)可指定為已預(yù)定義的優(yōu)化器名,如rmsprop、adagrad,或一個(gè)Optimizer類(lèi)的對(duì)象。
02 損失函數(shù)loss:
該參數(shù)為模型試圖最小化的目標(biāo)函數(shù),它可為預(yù)定義的損失函數(shù)名,如categorical_crossentropy、mse,也可以為一個(gè)損失函數(shù)。
03 指標(biāo)列表metrics:
對(duì)分類(lèi)問(wèn)題,我們一般將該列表設(shè)置為metrics=['accuracy']。指標(biāo)可以是一個(gè)預(yù)定義指標(biāo)的名字,也可以是一個(gè)用戶定制的函數(shù).指標(biāo)函數(shù)應(yīng)該返回單個(gè)張量,或一個(gè)完成metric_name - > metric_value映射的字典.
3、案例
01 基于多層感知器Softmax多分類(lèi)(圖片)
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', # 損失函數(shù) optimizer=sgd, # metrics=['accuracy'] # 精確度,評(píng)估模型在訓(xùn)練和測(cè)試時(shí)的網(wǎng)絡(luò)性能的指標(biāo)。 ) model.fit(x_train,y_train,epochs=20,batch_size=128) # batch_size 整數(shù),指定進(jìn)行梯度下降時(shí)每個(gè)批次包含的樣本數(shù)訓(xùn)練時(shí)一個(gè)批次的樣本 # 會(huì)被計(jì)算一次梯度下降,使目標(biāo)函數(shù)進(jìn)行一步優(yōu)化 # epochs;訓(xùn)練20次,整數(shù),訓(xùn)練終止時(shí)候的epoch值 score=model.evaluate(x_test,y_test,batch_size=128) # 評(píng)估函數(shù) ,本函數(shù)返回一個(gè)測(cè)試誤差的標(biāo)量值(如果模型沒(méi)有其他評(píng)價(jià)指標(biāo))。
02 MLP的二分類(lèi)
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)
相關(guān)詳細(xì)說(shuō)明見(jiàn)官方文檔:https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/
以上這篇Keras中的兩種模型:Sequential和Model用法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例
這篇文章主要介紹了基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11python自帶tkinter庫(kù)實(shí)現(xiàn)棋盤(pán)覆蓋圖形界面
這篇文章主要為大家詳細(xì)介紹了python自帶tkinter庫(kù)實(shí)現(xiàn)棋盤(pán)覆蓋圖形界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07淺談Python數(shù)據(jù)處理csv的應(yīng)用小結(jié)
這篇文章主要介紹了Python數(shù)據(jù)處理csv的簡(jiǎn)單應(yīng)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01python中pyplot基礎(chǔ)圖標(biāo)函數(shù)整理
在本篇文章里小編給大家整理的是一篇關(guān)于python中pyplot基礎(chǔ)圖標(biāo)函數(shù)整理的相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以參考下。2020-11-11Python subprocess模塊學(xué)習(xí)總結(jié)
從Python 2.4開(kāi)始,Python引入subprocess模塊來(lái)管理子進(jìn)程,以取代一些舊模塊的方法:如 os.system、os.spawn*、os.popen*、popen2.*、commands.*不但可以調(diào)用外部的命令作為子進(jìn)程,而且可以連接到子進(jìn)程的input/output/error管道,獲取相關(guān)的返回信息2014-03-03python更換國(guó)內(nèi)鏡像源三種實(shí)用方法
這篇文章主要給大家介紹了關(guān)于python更換國(guó)內(nèi)鏡像源三種實(shí)用方法的相關(guān)資料,更換Python鏡像源可以幫助解決使用pip安裝包時(shí)速度過(guò)慢或無(wú)法連接的問(wèn)題,需要的朋友可以參考下2023-09-09Python實(shí)現(xiàn)給文件添加內(nèi)容及得到文件信息的方法
這篇文章主要介紹了Python實(shí)現(xiàn)給文件添加內(nèi)容及得到文件信息的方法,可實(shí)現(xiàn)從文件開(kāi)頭添加內(nèi)容的功能,需要的朋友可以參考下2015-05-05python里的條件語(yǔ)句和循環(huán)語(yǔ)句你了解多少
這篇文章主要為大家詳細(xì)介紹了python的條件語(yǔ)句和循環(huán)語(yǔ)句,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02在Python中封裝GObject模塊進(jìn)行圖形化程序編程的教程
這篇文章主要介紹了在Python中封裝GObject模塊進(jìn)行圖形化程序編程的教程,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04python實(shí)現(xiàn)讀取類(lèi)別頻數(shù)數(shù)據(jù)畫(huà)水平條形圖案例
這篇文章主要介紹了python實(shí)現(xiàn)讀取類(lèi)別頻數(shù)數(shù)據(jù)畫(huà)水平條形圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04