本教程的目标是率领大家学会用 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 = 1000encoder = tf.keras.layers.experimental.preprocessing.TextVectorization( max_tokens=VOCAB_SIZE)encoder.adapt(train_dataset.map(lambda text, label: text))
接下来咱们须要搭建模型,下图是模型结构图
对应的代码如下所示
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)
下面是训练的后果记录图
代码地址: https://codechina.csdn.net/cs...