Hi everyone, I want to apply LSTM for a regression problem, and for each pixel it needs to predict two values. somehow the LSTM model keeps output same values for all inputs in the batch.
('out: ', tensor([[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891],
[0.2576, 0.0891]], device=‘cuda:0’, grad_fn=))
('Tmaps: ', tensor([[0.2760, 0.2000],
[0.5120, 0.2000],
[0.8000, 1.0000],
[0.0700, 0.7000],
[0.2580, 0.0400],
[0.0120, 0.0200],
[0.0160, 0.1600],
[0.0200, 0.2000],
[1.0000, 1.0000],
[0.1200, 0.2800]], device=‘cuda:0’))
This is how the model is implemented:
class MRF_RNN(nn.Module):
def init(self, input_dim, hidden_dim, output_dim, n_layers, batch_size):
super(MRF_RNN, self).init()
self.batch_size = batch_size
self.n_layers = n_layers
self.hidden_dim = hidden_dim
self.rnn = nn.LSTM(input_dim, hidden_dim, n_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
for m in self.modules():
if isinstance(m, nn.LSTM):
for param in m.parameters():
if len(param.shape) >= 2:
nn.init.orthogonal_(param.data)
else:
nn.init.normal_(param.data)
def forward(self, x):
out, (hidden, cell) = self.rnn(x)
out = self.fc(out[:, -1, :])
return out
Any inputs would be greatly appreciated!!