步驟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.建立模型
建立一個(gè)線性堆疊模型概荷,后續(xù)只需將各個(gè)神經(jīng)網(wǎng)絡(luò)加入模型即可
model = Sequential()
3.將嵌入層加入模型
model.add(Embedding(output_dim=32, #輸出維度為32蒲拉,我們希望將數(shù)字列表轉(zhuǎn)化為32維的向量
? ? ? ? ? ? ? ? ? ? input_dim=2000, #輸入的維度是2000,因?yàn)橹敖⒌淖值溆?000單詞
? ? ? ? ? ? ? ? ? ? input_length=100)) #數(shù)字列表每一項(xiàng)有100個(gè)數(shù)字
model.add(Dropout(0.2)) ? #加入dropout避免過度擬合
步驟6:將向量列表送入深度學(xué)習(xí)模型進(jìn)行訓(xùn)練
1.多層感知機(jī)
1.1 建立多層感知機(jī)模型
(1)將平坦層加入模型
model.add(Flatten())
每一項(xiàng)100個(gè)數(shù)字厅缺,一個(gè)數(shù)字轉(zhuǎn)化為32維向量,所以轉(zhuǎn)換為平坦層的神經(jīng)元有3200個(gè)
(2)將隱藏層加入模型
model.add(Dense(units=256, ? #共256個(gè)神經(jīng)元
? ? ? ? ? ? ? ? activation='relu' )) ? ?#激活函數(shù)為relu
model.add(Dropout(0.2)) ? #? #加入dropout避免過度擬合
(3)將輸出層加入模型
model.add(Dense(units=1, ? ?#輸出層只有一個(gè)神經(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']) #定義評(píng)估方式
(2)開始訓(xùn)練
train_history =model.fit(x_train, y_train,batch_size=100, #每批次100項(xiàng)
? ? ? ? ? ? ? ? ? ? ? ? epochs=10,verbose=2, ?#訓(xùn)練周期為10子刮,顯示訓(xùn)練過程
? ? ? ? ? ? ? ? ? ? ? ? validation_split=0.2) ?#訓(xùn)練集比例為80%(20000)訓(xùn)練藤肢,20%驗(yàn)證(25000*0.2=5000)
以上執(zhí)行界面可知篷帅,共執(zhí)行了10個(gè)訓(xùn)練周期,可以發(fā)現(xiàn)誤差越來越小漩绵,準(zhǔn)確率越來越高贱案。
準(zhǔn)確率:
損失函數(shù):
1.3 評(píng)估模型準(zhǔn)確率
使用test測(cè)試
scores = model.evaluate(x_test, y_test, verbose=1)
scores[1]
1.4 進(jìn)行預(yù)測(cè)
(1)執(zhí)行預(yù)測(cè)
predict=model.predict_classes(x_test)
(2)查看預(yù)測(cè)結(jié)果
(3)使用一維數(shù)組查看預(yù)測(cè)結(jié)果
predict_classes=predict.reshape(-1)
predict_classes[:10]
結(jié)果:
1.5 查看測(cè)試集數(shù)據(jù)預(yù)測(cè)結(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ù)測(cè)結(jié)果:',SentimentDict[predict_classes[i]])
(2)顯示預(yù)測(cè)結(jié)果
display_test_Sentiment(2)
1.6 使用較大字典提取更多文字
2000改為3800
2. RNN
使用simpleRNN建立16個(gè)神經(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