IMDB網(wǎng)絡(luò)電影數(shù)據(jù)集與自然語言處理(二)

步驟5:Embedding層將“數(shù)字列表”轉(zhuǎn)化為"向量列表"(加入嵌入層)

1.導(dǎo)入所需模塊

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation,Flatten

from keras.layers.embeddings import Embedding

2.建立模型

建立一個線性堆疊模型,后續(xù)只需將各個神經(jīng)網(wǎng)絡(luò)加入模型即可

model = Sequential()

3.將嵌入層加入模型

model.add(Embedding(output_dim=32, #輸出維度為32,我們希望將數(shù)字列表轉(zhuǎn)化為32維的向量

? ? ? ? ? ? ? ? ? ? input_dim=2000, #輸入的維度是2000,因為之前建立的字典有2000單詞

? ? ? ? ? ? ? ? ? ? input_length=100)) #數(shù)字列表每一項有100個數(shù)字

model.add(Dropout(0.2)) ? #加入dropout避免過度擬合

步驟6:將向量列表送入深度學(xué)習(xí)模型進(jìn)行訓(xùn)練

1.多層感知機(jī)

1.1 建立多層感知機(jī)模型

(1)將平坦層加入模型

model.add(Flatten())

每一項100個數(shù)字,一個數(shù)字轉(zhuǎn)化為32維向量,所以轉(zhuǎn)換為平坦層的神經(jīng)元有3200個

(2)將隱藏層加入模型

model.add(Dense(units=256, ? #共256個神經(jīng)元

? ? ? ? ? ? ? ? activation='relu' )) ? ?#激活函數(shù)為relu

model.add(Dropout(0.2)) ? #? #加入dropout避免過度擬合

(3)將輸出層加入模型

model.add(Dense(units=1, ? ?#輸出層只有一個神經(jīng)元

? ? ? ? ? ? ? ? activation='sigmoid' )) ?#定義激活函數(shù)sigmoid

(4)查看模型摘要


1.2 訓(xùn)練模型

(1)定義訓(xùn)練方法

model.compile(loss='binary_crossentropy', ?#損失函數(shù)

? ? ? ? ? ? ? optimizer='adam', ?#定義優(yōu)化器

? ? ? ? ? ? ? metrics=['accuracy']) #定義評估方式

(2)開始訓(xùn)練

train_history =model.fit(x_train, y_train,batch_size=100, #每批次100項

? ? ? ? ? ? ? ? ? ? ? ? epochs=10,verbose=2, ?#訓(xùn)練周期為10,顯示訓(xùn)練過程

? ? ? ? ? ? ? ? ? ? ? ? validation_split=0.2) ?#訓(xùn)練集比例為80%(20000)訓(xùn)練,20%驗證(25000*0.2=5000)


以上執(zhí)行界面可知,共執(zhí)行了10個訓(xùn)練周期,可以發(fā)現(xiàn)誤差越來越小,準(zhǔn)確率越來越高。

準(zhǔn)確率:


損失函數(shù):

1.3 評估模型準(zhǔn)確率

使用test測試

scores = model.evaluate(x_test, y_test, verbose=1)

scores[1]


1.4 進(jìn)行預(yù)測

(1)執(zhí)行預(yù)測

predict=model.predict_classes(x_test)

(2)查看預(yù)測結(jié)果


(3)使用一維數(shù)組查看預(yù)測結(jié)果

predict_classes=predict.reshape(-1)

predict_classes[:10]

結(jié)果:

1.5 查看測試集數(shù)據(jù)預(yù)測結(jié)果

(1)創(chuàng)建display_test_Sentiment函數(shù)

SentimentDict={1:'正面的',0:'負(fù)面的'}

def display_test_Sentiment(i):

? ? print(test_text[i])

? ? print('標(biāo)簽label:',SentimentDict[y_test[i]],

? ? ? ? ? '預(yù)測結(jié)果:',SentimentDict[predict_classes[i]])

(2)顯示預(yù)測結(jié)果

display_test_Sentiment(2)



1.6 使用較大字典提取更多文字

2000改為3800



2. RNN

使用simpleRNN建立16個神經(jīng)元的RNN層

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation

from keras.layers.embeddings import Embedding

from keras.layers.recurrent import SimpleRNN

model = Sequential()

model.add(Embedding(output_dim=32,

? ? ? ? ? ? ? ? ? ? input_dim=3800,

? ? ? ? ? ? ? ? ? ? input_length=380))

model.add(Dropout(0.35))

model.add(SimpleRNN(units=16))

model.add(Dense(units=256,activation='relu' ))

model.add(Dropout(0.35))

model.add(Dense(units=1,activation='sigmoid' ))

model.summary()



3. LSTM

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation,Flatten

from keras.layers.embeddings import Embedding

from keras.layers.recurrent import LSTM



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容