使用Keras處理二分類問題——以電影評論為例

1.IMDB數(shù)據(jù)集:

本次使用的IMDB數(shù)據(jù)集包含來自IMDB的50000條嚴(yán)重兩級分化的評論。
數(shù)據(jù)集被分為用于訓(xùn)練的25000條評論和用于測試的25000條評論,其中訓(xùn)練集和測試集都包含50%的正面評論和50%的負(fù)面評論。
與MNIST數(shù)據(jù)集一樣,IMDB數(shù)據(jù)集也內(nèi)置到了Keras庫中,并且已經(jīng)經(jīng)過了預(yù)處理,評論(單詞序列)已經(jīng)被轉(zhuǎn)換為整數(shù)序列,其中每個整數(shù)代表字典中的某個單詞。

2.分步驟實(shí)現(xiàn):

  • 1.加載IMDB數(shù)據(jù)集
  • 2.將評論解碼為英文單詞

  • 3.數(shù)據(jù)預(yù)處理
  • 4.構(gòu)建網(wǎng)絡(luò)
  • 5.訓(xùn)練模型
  • 6.可視化監(jiān)控參數(shù)
  • 7.重新訓(xùn)練模型,并在測試數(shù)據(jù)上評估模型效果

3.全流程代碼:

import numpy as np
from keras.datasets import imdb
from keras import models
from keras import layers

# 參數(shù)num_words=10000表示僅保留訓(xùn)練數(shù)據(jù)中前10000個最常出現(xiàn)的單詞,其他低頻單詞將被舍棄,這樣得到的向量數(shù)據(jù)就不會太大,便于后續(xù)處理
(train_data , train_labels) , (test_data , test_labels) = imdb.load_data(num_words=10000)

# 因?yàn)椴荒軐⒄麛?shù)序列直接輸入神經(jīng)網(wǎng)絡(luò),因此需要先對數(shù)據(jù)進(jìn)行預(yù)處理,將列表轉(zhuǎn)換為張量。
# 這里對列表進(jìn)行one-hot編碼,將其轉(zhuǎn)換為0和1組成的向量。
def vectorize_sequences(sequences,dimension=10000):
    results = np.zeros((len(sequences),dimension)) # 創(chuàng)建一個形狀為(len(sequences),dimension)的全零矩陣
    for i , sequence in enumerate(sequences):
        results[i ,sequence] = 1 # 將results[i]的指定索引設(shè)為1
    return results

# 將訓(xùn)練和測試數(shù)據(jù)向量化
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
# 將標(biāo)簽數(shù)據(jù)向量化 就是將list轉(zhuǎn)換為array數(shù)組
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')

# 構(gòu)建模型
model = models.Sequential()
model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(16,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
# 編譯模型
model.compile(optimizer='rmsprop',
             loss='binary_crossentropy',
             metrics=['accuracy'])
# 訓(xùn)練模型
history = model.fit(x_train,y_train,epochs=20,batch_size=512)
# 評估模型
results = model.evaluate(x_test,y_test)
print(results)

# 使用訓(xùn)練好的模型在新數(shù)據(jù)上生成預(yù)測結(jié)果
# print(model.predict(x_test))

Reference:
《Deep Learning with Python》

?著作權(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)容