天天看點

text classification with RNN

本教程的目的是帶領大家學會用 RNN 進行文本分類

本次用到的資料集是 IMDB,一共有 50000 條電影評論,其中 25000 條是訓練集,另外 25000 條是測試集

首先我們需要加載資料集,可以通過 TFDS 很簡單的把資料集下載下傳過來,如下代碼所示

dataset, info = tfds.load('imdb_reviews', with_info=True, as_supervised=True)

train_dataset, test_dataset = dataset['train'], dataset['test']

train_dataset.element_spec           

接下來我們需要建立 text encoder,可以通過 tf.keras.layers.experimental.preprocessing.TextVectorization 實作,如下代碼所示

VOCAB_SIZE = 1000
encoder = tf.keras.layers.experimental.preprocessing.TextVectorization(
    max_tokens=VOCAB_SIZE
)
encoder.adapt(train_dataset.map(lambda text, label: text))           

接下來我們需要搭模組化型,下圖是模型結構圖

text classification with RNN

對應的代碼如下所示

model = tf.keras.Sequential([
    encoder,
    tf.keras.layers.Embedding(
        input_dim=len(encoder.get_vocabulary()),
        output_dim=64,
        # Use masking to handle the variable sequence lengths
        mask_zero=True),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1)
])

model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              optimizer=tf.keras.optimizers.Adam(1e-4),
              metrics=['accuracy'])           

到這一步,我們就可以開始訓練了,以及訓練後進行模型評估

history = model.fit(train_dataset, epochs=10,
                    validation_data=test_dataset,
                    validation_steps=30)

test_loss, test_acc = model.evaluate(test_dataset)

print('Test Loss:', test_loss)
print('Test Accuracy:', test_acc)           
text classification with RNN

上面是訓練的結果記錄圖

代碼位址:

https://codechina.csdn.net/csdn_codechina/enterprise_technology/-/blob/master/text_classification_rnn.ipynb

繼續閱讀