lstm预测sin函数
时间: 2025-01-03 16:42:43 浏览: 6
### 使用LSTM神经网络进行sin函数时间序列预测
#### 数据准备
为了使 LSTM 能够学习到 sin 函数的时间依赖关系,需要构建合适的数据集。给定三个连续的 sin 值 \( y_1, y_2, y_3 \),目标是预测下一个值 \( y_4 \)[^1]。
```python
import numpy as np
def create_dataset(sin_values, look_back=3):
dataX, dataY = [], []
for i in range(len(sin_values)-look_back):
a = sin_values[i:(i+look_back)]
dataX.append(a)
dataY.append(sin_values[i + look_back])
return np.array(dataX), np.array(dataY)
# 创建示例数据
t = np.linspace(0, 2 * np.pi, 1000)
sin_values = np.sin(t)
dataX, dataY = create_dataset(sin_values)
```
#### 构建LSTM模型
基于提供的信息,选择一层 LSTM 层,并设置该层有8个神经元。此配置适用于简单的单步预测任务[^2]。
```python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(8, input_shape=(3, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
```
#### 训练模型
采用 `ReduceLROnPlateau` 和 `EarlyStopping` 来优化训练过程中的学习效率以及防止过拟合现象的发生。
```python
from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2,
patience=5, min_lr=0.001)
early_stopping = EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(
dataX.reshape((dataX.shape[0], dataX.shape[1], 1)),
dataY,
epochs=200,
batch_size=16,
validation_split=0.2,
callbacks=[reduce_lr, early_stopping]
)
```
#### 预测与评估
完成上述步骤之后,可以利用训练好的模型对未来时刻的 sin 函数值做出预测,并对比实际值来进行性能评价。
阅读全文