Dear pytorch community,
I am currently faced with an issue of not being able to carry out the evaluation of the importance of features of my multivariate forecasting model.
Here is the model architecture:
class MultivariateLSTM(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, output_size):
super(MultivariateLSTM, self).__init__()
self.hidden_size = hidden_size
self.lstm = nn.LSTM(input_size = input_size, hidden_size = hidden_size, num_layers = num_layers, batch_first = True, dropout = 0.2)
self.fc1 = nn.Linear(hidden_size, 8)
self.fc2 = nn.Linear(8, output_size)
self.relu = nn.ReLU()
# self.relu = SmeLU(6)
def forward(self, x):
out, _ = self.lstm(x)
out = self.relu(out)
out = self.fc1(out[:, -1, :])
out = self.relu(out)
out = self.fc2(out)
return out
Here are the sample shapes used as inputs and outputs:
train_X_tensor.shape, train_y_tensor.shape = torch.Size([10339, 12, 3]) torch.Size([10339, 6])
Note that the structure of the input follows the (samples, seq_len, features) convention used in forecasting models.
Here is the code block used to evaluate the feature importance:
ig = IntegratedGradients(model)
ig_nt = NoiseTunnel(ig)
dl = DeepLift(model)
gs = GradientShap(model)
fa = FeatureAblation(model)
ig_attr_test = ig.attribute(test_X_tensor, n_steps=50)
ig_nt_attr_test = ig_nt.attribute(test_X_tensor)
dl_attr_test = dl.attribute(test_X_tensor)
gs_attr_test = gs.attribute(test_X_tensor, train_X_tensor)
fa_attr_test = fa.attribute(test_X_tensor)
and this is the current error:
----> 7 ig_attr_test = ig.attribute(test_X_tensor, n_steps=50)
AssertionError: Target not provided when necessary, cannot take gradient with respect to multiple outputs.
Does anyone have experience evaluating with Captum? I greatly appreciate if you could share your thoughts and experiences in this matter!
Thank you