Keras 简明教程
Keras - Time Series Prediction using LSTM RNN
在本章中,我们将编写一个基于简单长短期记忆 (LSTM) 的 RNN 来执行序列分析。序列是一组值,其中每个值对应于时间的一个特定实例。我们考虑一个简单的阅读句子示例。阅读理解一个句子包括按给定顺序阅读单词并尝试理解给定语境中的每个单词及其含义,最后以积极或消极的情感理解句子。
在此处,单词被视为值,并且第一个值对应于第一个单词,第二个值对应于第二个单词,等等,并严格保持顺序。 Sequence Analysis 在自然语言处理中经常用于寻找给定文本的情感分析。
让我们创建一个 LSTM 模型来分析 IMDB 电影评论并找出其正面/负面情绪。
用于序列分析的模型可以表示为以下内容 −
该模型的核心功能如下:
-
输入层使用具有 128 个特征的嵌入层。
-
第一层,Dense 由 128 个单元组成,具有法线置零和循环置零,设置为 0.2。
-
输出层,Dense 由 1 个单元和“sigmoid”激活函数组成。
-
使用 binary_crossentropy 作为损失函数。
-
Use adam as Optimizer.
-
Use accuracy as metrics.
-
使用 32 作为批量大小。
-
Use 15 as epochs.
-
使用 80 作为单词的最大长度。
-
使用 2000 作为给定句子中单词的最大数量。
Step 1: Import the modules
让我们导入必需的模块。
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding
from keras.layers import LSTM
from keras.datasets import imdb
Step 2: Load data
我们导入 imdb 数据集。
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words = 2000)
在此,
-
imdb 是 Keras 提供的数据集。它表示一系列电影及其评论。
-
num_words 表示评论中的最大单词数。
Step 3: Process the data
让我们根据模型更改数据集,以便可以将其输入到模型中。可以使用以下代码更改数据 −
x_train = sequence.pad_sequences(x_train, maxlen=80)
x_test = sequence.pad_sequences(x_test, maxlen=80)
在此,
sequence.pad_sequences 将形状为 (data) 的输入数据列表转换为形状为 (data, timesteps) 的 2D NumPy 数组。它基本上将时间步概念添加到给定数据中。它生成长度为 maxlen 的时间步。
Step 4: Create the model
让我们创建实际模型。
model = Sequential()
model.add(Embedding(2000, 128))
model.add(LSTM(128, dropout = 0.2, recurrent_dropout = 0.2))
model.add(Dense(1, activation = 'sigmoid'))
在此,
我们使用 Embedding layer 作为输入层,然后添加 LSTM 层。最后,使用 Dense layer 作为输出层。
Step 5: Compile the model
让我们使用选定的损失函数、优化器和指标来编译模型。
model.compile(loss = 'binary_crossentropy',
optimizer = 'adam', metrics = ['accuracy'])
Step 6: Train the model
让我们使用 fit() 方法训练模型。
model.fit(
x_train, y_train,
batch_size = 32,
epochs = 15,
validation_data = (x_test, y_test)
)
执行该应用程序将输出以下信息 −
Epoch 1/15 2019-09-24 01:19:01.151247: I
tensorflow/core/platform/cpu_feature_guard.cc:142]
Your CPU supports instructions that this
TensorFlow binary was not co mpiled to use: AVX2
25000/25000 [==============================] - 101s 4ms/step - loss: 0.4707
- acc: 0.7716 - val_loss: 0.3769 - val_acc: 0.8349 Epoch 2/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.3058
- acc: 0.8756 - val_loss: 0.3763 - val_acc: 0.8350 Epoch 3/15
25000/25000 [==============================] - 91s 4ms/step - loss: 0.2100
- acc: 0.9178 - val_loss: 0.5065 - val_acc: 0.8110 Epoch 4/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.1394
- acc: 0.9495 - val_loss: 0.6046 - val_acc: 0.8146 Epoch 5/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.0973
- acc: 0.9652 - val_loss: 0.5969 - val_acc: 0.8147 Epoch 6/15
25000/25000 [==============================] - 98s 4ms/step - loss: 0.0759
- acc: 0.9730 - val_loss: 0.6368 - val_acc: 0.8208 Epoch 7/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.0578
- acc: 0.9811 - val_loss: 0.6657 - val_acc: 0.8184 Epoch 8/15
25000/25000 [==============================] - 97s 4ms/step - loss: 0.0448
- acc: 0.9850 - val_loss: 0.7452 - val_acc: 0.8136 Epoch 9/15
25000/25000 [==============================] - 95s 4ms/step - loss: 0.0324
- acc: 0.9894 - val_loss: 0.7616 - val_acc: 0.8162Epoch 10/15
25000/25000 [==============================] - 100s 4ms/step - loss: 0.0247
- acc: 0.9922 - val_loss: 0.9654 - val_acc: 0.8148 Epoch 11/15
25000/25000 [==============================] - 99s 4ms/step - loss: 0.0169
- acc: 0.9946 - val_loss: 1.0013 - val_acc: 0.8104 Epoch 12/15
25000/25000 [==============================] - 90s 4ms/step - loss: 0.0154
- acc: 0.9948 - val_loss: 1.0316 - val_acc: 0.8100 Epoch 13/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0113
- acc: 0.9963 - val_loss: 1.1138 - val_acc: 0.8108 Epoch 14/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0106
- acc: 0.9971 - val_loss: 1.0538 - val_acc: 0.8102 Epoch 15/15
25000/25000 [==============================] - 89s 4ms/step - loss: 0.0090
- acc: 0.9972 - val_loss: 1.1453 - val_acc: 0.8129
25000/25000 [==============================] - 10s 390us/step