实现一对多LSTM/RNN,PyTorch

实现一对多LSTM/RNN,PyTorch,pytorch,recurrent-neural-network,Pytorch,Recurrent Neural Network,我有一个大小为m x n的矩阵,我想用1 x n向量(x在)预测整个下一个(m-1)x n矩阵(图中y^{I}),使用RNN或LSTM,我不知道如何实现每一个 1 x n向量到下一个隐藏状态,并获取所有 (m-1)xn向量同时及如何计算所有y^{i}上的误差 我有这个普通的RNN模型,不知道如何修改它 class RNNModel(nn.Module): def __init__(self, input_dim, hidden_dim, layer_dim, output_dim): s

我有一个大小为m x n的矩阵,我想用1 x n向量(x在)预测整个下一个(m-1)x n矩阵(图中y^{I}),使用RNN或LSTM,我不知道如何实现每一个 1 x n向量到下一个隐藏状态,并获取所有 (m-1)xn向量同时及如何计算所有y^{i}上的误差

我有这个普通的RNN模型,不知道如何修改它

class RNNModel(nn.Module):
def __init__(self, input_dim, hidden_dim, layer_dim, output_dim):
    super(RNNModel, self).__init__()
    
    self.hidden_dim = hidden_dim

    
    self.layer_dim = layer_dim

    
    # (batch_dim, seq_dim, feature_dim)
    self.RNN = nn.RNN(input_dim, hidden_dim, layer_dim, batch_first=True, nonlinearity='tanh')
    
    
    self.fc = nn.Linear(hidden_dim, output_dim)
    

def forward(self, x):
    # Initialize hidden state with zeros
    h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()

    
    out, h_t = self.RNN(x, h0)
    
    #out = self.fc(h_t[:, -1, :]) 
    out = self.fc(out[:, -1, :]) 
    
    return out
斯坦利,试试这个: 仅当未传递其他隐藏状态时,才启动隐藏状态。然后返回隐藏状态,并在下一次迭代中将其传递给
forward()

def forward(self, x, h=None):
    
    if h is None: # if no hidden state is passed
        h = torch.zeros(  # Initialize hidden state with zeros
            self.layer_dim, x.size(0),
            self.hidden_dim).requires_grad_()

    out, h_t = self.RNN(x, h)
    out = self.fc(out[:, -1, :]) 
    return out, h_t
在培训代码中,您可以这样运行循环:

x = seed 
h = None
for i in range (...)
    optimizer.zero_grad()
    ...
    x, h = model.forward (x, h)
    ...
    loss = ...
    loss.backward()
    optimizer.step()