- Keras 教程
- Keras - 首页
- Keras - 简介
- Keras - 安装
- Keras - 后端配置
- Keras - 深度学习概述
- Keras - 深度学习
- Keras - 模块
- Keras - 层
- Keras - 自定义层
- Keras - 模型
- Keras - 模型编译
- Keras - 模型评估和预测
- Keras - 卷积神经网络
- Keras - 使用 MPL 进行回归预测
- Keras - 使用 LSTM RNN 进行时间序列预测
- Keras - 应用
- Keras - 使用 ResNet 模型进行实时预测
- Keras - 预训练模型
- Keras 有用资源
- Keras - 快速指南
- Keras - 有用资源
- Keras - 讨论
Keras - 使用 LSTM RNN 进行时间序列预测
在本章中,让我们编写一个简单的基于长短期记忆 (LSTM) 的 RNN 来进行序列分析。序列是一组值,其中每个值对应于特定时间实例。让我们考虑一个阅读句子的简单例子。阅读和理解句子涉及按给定顺序阅读单词,并尝试理解每个单词及其在给定上下文中的含义,最后以正面或负面情绪理解句子。
这里,单词被视为值,第一个值对应于第一个单词,第二个值对应于第二个单词,依此类推,并且顺序将严格保持。序列分析经常用于自然语言处理中,以查找给定文本的情感分析。
让我们创建一个 LSTM 模型来分析 IMDB 电影评论并找到其正面/负面情绪。
序列分析模型可以表示如下:
模型的核心特征如下:
使用具有 128 个特征的嵌入层作为输入层。
第一层,密集层包含 128 个单元,正常 dropout 和循环 dropout 设置为 0.2。
输出层,密集层包含 1 个单元和“sigmoid”激活函数。
使用binary_crossentropy作为损失函数。
使用adam作为优化器。
使用accuracy作为指标。
使用 32 作为批量大小。
使用 15 作为轮数。
使用 80 作为单词的最大长度。
使用 2000 作为给定句子中单词的最大数量。
步骤 1:导入模块
让我们导入必要的模块。
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
步骤 2:加载数据
让我们导入 imdb 数据集。
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words = 2000)
这里:
imdb 是 Keras 提供的数据集。它表示电影及其评论的集合。
num_words 表示评论中单词的最大数量。
步骤 3:处理数据
让我们根据我们的模型更改数据集,以便可以将其馈送到我们的模型中。可以使用以下代码更改数据:
x_train = sequence.pad_sequences(x_train, maxlen=80) x_test = sequence.pad_sequences(x_test, maxlen=80)
这里:
sequence.pad_sequences 将形状为(data)的输入数据列表转换为形状为(data, timesteps)的二维 NumPy 数组。基本上,它在给定数据中添加了 timesteps 概念。它生成长度为maxlen的时间步长。
步骤 4:创建模型
让我们创建实际的模型。
model = Sequential() model.add(Embedding(2000, 128)) model.add(LSTM(128, dropout = 0.2, recurrent_dropout = 0.2)) model.add(Dense(1, activation = 'sigmoid'))
这里:
我们使用嵌入层作为输入层,然后添加 LSTM 层。最后,使用密集层作为输出层。
步骤 5:编译模型
让我们使用选择的损失函数、优化器和指标来编译模型。
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
步骤 6:训练模型
让我们使用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
步骤 7 - 评估模型
让我们使用测试数据评估模型。
score, acc = model.evaluate(x_test, y_test, batch_size = 32)
print('Test score:', score)
print('Test accuracy:', acc)
执行上述代码将输出以下信息:
Test score: 1.145306069601178 Test accuracy: 0.81292