import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
# 生成一些样例数据
torch.manual_seed(0)
sequence_length = 10
num_samples = 1000
X_train = torch.rand(num_samples, sequence_length, 1)
y_train = torch.sum(X_train, dim=1) + 0.1 * torch.randn(num_samples, 1)
# 定义 LSTM 模型
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(LSTMModel, self).__init__()
self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
lstm_out, _ = self.lstm(x)
output = self.fc(lstm_out[:, -1, :])
return output
# 初始化模型、损失函数和优化器
input_size = 1
hidden_size = 50
output_size = 1
model = LSTMModel(input_size, hidden_size, output_size)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 将数据转换为 PyTorch 的 Tensor
X_train = X_train.float()
y_train = y_train.float()
# 训练模型
num_epochs = 10
for epoch in range(num_epochs):
optimizer.zero_grad()
outputs = model(X_train)
loss = criterion(outputs, y_train)
loss.backward()
optimizer.step()
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
# 预测新数据
X_new = torch.rand(5, sequence_length, 1).float()
predictions = model(X_new)
print("Predictions:")
print(predictions.detach().numpy())