亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風(fēng)向標(biāo)——亞洲寵物展覽會(huì)深度解析
947
2022-05-29
2.3.2 Keras使用入門
Keras包含兩種模型類型,第一種是序列模型,第二種是函數(shù)式模型。其中后者屬于Keras的進(jìn)階型模型結(jié)構(gòu),適用于多入多出、有向無環(huán)圖或具備共享層的模型,具體可參看Keras官方文檔。本小節(jié)中主要以序列模型為例來帶領(lǐng)讀者學(xué)習(xí)Keras的使用方法。
所謂序列模型是指多個(gè)網(wǎng)絡(luò)層線性堆疊的模型,結(jié)構(gòu)如下列代碼所示。該序列模型包含了一個(gè)784×32的全連接層、ReLU激活函數(shù)、32×10的全連接層以及softmax激活函數(shù)。
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
也可以使用add()方法進(jìn)行序列模型中網(wǎng)絡(luò)層的添加。
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
下面我們來看一個(gè)Keras實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò)二分類示例,其網(wǎng)絡(luò)結(jié)構(gòu)非常簡(jiǎn)單,由兩個(gè)全連接層構(gòu)成。示例中包含了網(wǎng)絡(luò)模型的搭建、模型的編譯以及訓(xùn)練,讀者可以在自己的設(shè)備上嘗試運(yùn)行此代碼以熟悉Keras的使用。
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
data = np.random.random((1000,100))
labels = np.random.randint(2,size=(1000,1))
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(data,labels,epochs=10,batch_size=32)
predictions = model.predict(data)
下面我們來嘗試搭建一些序列模型。首先使用序列模型來搭建卷積神經(jīng)網(wǎng)絡(luò)(CNN),代碼如下。
from keras.models import Sequential
from keras.layers import Activation,Conv2D,MaxPooling2D,Flatten
model = Sequential()
model.add(Conv2D(32,(3,3),padding='same',input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(64,(3,3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64,(3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
同樣,也可以使用Keras的序列模型實(shí)現(xiàn)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),代碼如下。
from keras.models import Sequential
from keras.klayers import Dense,Embedding,LSTM
model = Sequential()
model.add(Embedding(20000,128))
model.add(LSTM(128,dropout=0.2,recurrent_dropout=0.2))
model.add(Dense(1,activation='sigmoid'))
可以發(fā)現(xiàn)使用Keras來實(shí)現(xiàn)那些復(fù)雜的深度學(xué)習(xí)網(wǎng)絡(luò)其實(shí)是一件非常簡(jiǎn)單的事情,在模型搭建完畢后可以設(shè)置模型的編譯,下面分別是CNN與RNN的編譯。
CNN模型的優(yōu)化與編譯:
from keras.optimizers import RMSprop
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
RNN模型的編譯:
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
在完成模型的編譯后就可以對(duì)模型進(jìn)行訓(xùn)練了,這里的代碼是對(duì)RNN模型進(jìn)行訓(xùn)練與評(píng)估。
model.fit(x_train, y_train, batch_size=32, epochs=15, verbose=1, validation_
data=(x_test,y_test))
score = model.evaluate(x_test, y_test, batch_size=32)
最終可以將模型保存到本地。
from keras.models import load_model
model.save('model_file.h5')
my_model = load_model('my_model.h5')
在下一小節(jié)中會(huì)通過一個(gè)簡(jiǎn)明的案例讓大家了解如何使用Keras解決實(shí)際的應(yīng)用問題。
網(wǎng)絡(luò) 深度學(xué)習(xí)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。