实现一对多LSTM/RNN,PyTorch
我有一个大小为m x n的矩阵,我想用1 x n向量(x在)预测整个下一个(m-1)x n矩阵(图中y^{I}),使用RNN或LSTM,我不知道如何实现每一个 1 x n向量到下一个隐藏状态,并获取所有 (m-1)xn向量同时及如何计算所有y^{i}上的误差 我有这个普通的RNN模型,不知道如何修改它实现一对多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
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()