python实现lstm神经网络多输入单输出
时间: 2023-09-12 12:03:51 浏览: 148
实现LSTM神经网络多输入单输出的Python代码示例如下:
首先,我们需要导入需要的库:
```python
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Dense
```
接下来,我们需要准备训练数据和测试数据。假设我们有两个输入变量 x1 和 x2,和一个输出变量 y。我们可以将它们存储在两个矩阵 X1 和 X2 中,以及一个向量 y 中。
```python
# 训练数据
X1_train = np.random.rand(100, 10)
X2_train = np.random.rand(100, 5)
y_train = np.random.rand(100, 1)
# 测试数据
X1_test = np.random.rand(10, 10)
X2_test = np.random.rand(10, 5)
```
接下来,我们需要定义模型。我们可以使用 Sequential 模型,添加两个 LSTM 层和一个 Dense 层,其中 Dense 层只有一个神经元,因为我们只需要一个输出变量。
```python
model = Sequential()
# 添加第一个 LSTM 层
model.add(LSTM(units=32, return_sequences=True, input_shape=(X1_train.shape[1], 1)))
model.add(LSTM(units=16, return_sequences=False))
# 添加第二个 LSTM 层
model.add(LSTM(units=16, return_sequences=False))
# 添加 Dense 层
model.add(Dense(units=1, activation='linear'))
# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')
```
接下来,我们可以训练模型,使用 fit() 函数,训练数据和标签都是多维数组。
```python
model.fit([X1_train, X2_train], y_train, epochs=10, batch_size=10)
```
最后,我们可以使用 predict() 函数,对测试数据进行预测。
```python
y_pred = model.predict([X1_test, X2_test])
```
完整的代码示例如下:
```python
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Dense
# 训练数据
X1_train = np.random.rand(100, 10)
X2_train = np.random.rand(100, 5)
y_train = np.random.rand(100, 1)
# 测试数据
X1_test = np.random.rand(10, 10)
X2_test = np.random.rand(10, 5)
# 定义模型
model = Sequential()
# 添加第一个 LSTM 层
model.add(LSTM(units=32, return_sequences=True, input_shape=(X1_train.shape[1], 1)))
model.add(LSTM(units=16, return_sequences=False))
# 添加第二个 LSTM 层
model.add(LSTM(units=16, return_sequences=False))
# 添加 Dense 层
model.add(Dense(units=1, activation='linear'))
# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')
# 训练模型
model.fit([X1_train, X2_train], y_train, epochs=10, batch_size=10)
# 预测测试数据
y_pred = model.predict([X1_test, X2_test])
```
阅读全文