一、实现过程
RNN具体模型请参考这里。
基于RNN的正弦波形下一段波形的预测代码如下:
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
num_time_steps = 50
input_size = 1
hidden_size = 16
num_layers = 1
output_size = 1
# 设计模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.rnn = nn.RNN(
input_size=input_size,
hidden_size=hidden_size,
num_layers=num_layers,
batch_first=True
)
self.linear = nn.Linear(hidden_size,output_size)
def forward(self,x,hidden_prev):
out,hidden_prev = self.rnn(x,hidden_prev)
# [1,seq,h] => [seq,h]
out = out.view(-1,hidden_size)
out = self.linear(out) # [seq,h] => [seq,1]
out = out.unsqueeze(dim=0) # => [1,seq,1]
return out,hidden_prev
#
model = Net()
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(),lr=0.001)
# 训练
hidden_prev = torch.zeros(1,1,hidden_size)
for iter in range(6000):
start = np.random.randint(3, size=1)[0]
time_steps = np.linspace(start, start + 10, num_time_steps)
data