def test_simple_relu_internal_inf(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[3.0, 4.0, 0.0]], requires_grad=True) self._internal_influence_test_assert(net, net.relu, inp, [[1.0, 1.0, 1.0, 1.0]])
def test_single_lime_scalar_tensor_1d(self) -> None: net = BasicModel_MultiLayer() self._single_input_scalar_lime_assert( lambda inp: torch.sum(net(inp)).reshape(1))
def test_simple_input_gradient_activation(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]], requires_grad=True) self._layer_activation_test_assert(net, net.linear0, inp, [0.0, 400.0, 0.0])
def test_simple_output_activation(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]]) self._layer_activation_test_assert(net, net.linear2, inp, [392.0, 394.0])
def test_sensitivity_n_ig(self) -> None: model = BasicModel_MultiLayer() ig = IntegratedGradients(model) self.basic_multilayer_sensitivity_n(ig, model)
def test_simple_ig_input_relu_selector_fn(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 5.0, 4.0]]) self._ig_input_test_assert(net, net.relu, inp, lambda x: torch.sum(x[:, 2:]), [[0.0, 10.0, 8.0]])
def test_simple_linear_activation_inplace(self) -> None: net = BasicModel_MultiLayer(inplace=True) inp = torch.tensor([[2.0, -5.0, 4.0]]) self._layer_activation_test_assert(net, net.linear1, inp, [-9.0, 2.0, 2.0, 2.0])
def test_simple_output_conductance(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]], requires_grad=True) self._conductance_test_assert(net, net.linear2, inp, [[390.0, 0.0]])
def test_simple_input_non_conv(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]], requires_grad=True) self._grad_cam_test_assert(net, net.linear0, inp, [[400.0]])
def test_multi_sample_shapley_batch_scalar_tensor_int(self) -> None: net = BasicModel_MultiLayer() self._single_input_multi_sample_batch_scalar_shapley_assert( lambda inp: int(torch.sum(net(inp)).item()))
def test_simple_relu_conductance(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]]) self._conductance_test_assert(net, net.relu, inp, [[90.0, 100.0, 100.0, 100.0]])
def test_single_shapley_int_batch_scalar_tensor_1d(self) -> None: net = BasicModel_MultiLayer() self._single_int_input_multi_sample_batch_scalar_shapley_assert( lambda inp: torch.sum(net(inp.float())).reshape(1))
def test_simple_target_missing_error(self) -> None: net = BasicModel_MultiLayer() inp = torch.zeros((1, 3)) with self.assertRaises(AssertionError): attr = IntegratedGradients(net) attr.attribute(inp)
def test_simple_output_internal_inf(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]]) self._internal_influence_test_assert(net, net.linear2, inp, [[1.0, 0.0]])
def test_simple_ig_input_relu(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 6.0, 14.0]], requires_grad=True) self._ig_input_test_assert(net, net.relu, inp, (0, ), [[0.0, 3.0, 7.0]])
def test_simple_multi_input_non_conv(self) -> None: net = BasicModel_MultiLayer(multi_input_module=True) inp = torch.tensor([[0.0, 6.0, 0.0]], requires_grad=True) self._grad_cam_test_assert(net, net.multi_relu, inp, ([[21.0]], [[21.0]]))
def test_simple_ig_input_relu2(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 5.0, 4.0]]) self._ig_input_test_assert(net, net.relu, inp, 1, [[0.0, 5.0, 4.0]])
def test_multi_sample_ablation_batch_scalar_tensor_1d(self) -> None: net = BasicModel_MultiLayer() ablation_algo = FeatureAblation( lambda inp: torch.sum(net(inp)).reshape(1)) self._single_input_multi_sample_batch_scalar_ablation_assert( ablation_algo)
def test_simple_ig_input_relu2_agg_neurons(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 5.0, 4.0]]) self._ig_input_test_assert(net, net.relu, inp, (slice(0, 2, 1), ), [[0.0, 5.0, 4.0]])
def test_multi_sample_ablation_batch_scalar_tensor_int(self) -> None: net = BasicModel_MultiLayer() ablation_algo = FeatureAblation( lambda inp: int(torch.sum(net(inp)).item())) self._single_input_multi_sample_batch_scalar_ablation_assert( ablation_algo, dtype=torch.int64)
def test_simple_relu_activation(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[3.0, 4.0, 0.0]], requires_grad=True) self._layer_activation_test_assert(net, net.relu, inp, [0.0, 8.0, 8.0, 8.0])
def test_simple_ablation(self) -> None: ablation_algo = FeatureAblation(BasicModel_MultiLayer()) inp = torch.tensor([[20.0, 50.0, 30.0]], requires_grad=True) self._ablation_test_assert(ablation_algo, inp, [[80.0, 200.0, 120.0]], perturbations_per_eval=(1, 2, 3))
def test_simple_multi_output_activation(self) -> None: net = BasicModel_MultiLayer(multi_input_module=True) inp = torch.tensor([[0.0, 6.0, 0.0]]) self._layer_activation_test_assert( net, net.multi_relu, inp, ([0.0, 7.0, 7.0, 7.0], [0.0, 7.0, 7.0, 7.0]))
def test_single_kernel_shap_scalar_tensor_0d(self) -> None: net = BasicModel_MultiLayer() self._single_input_scalar_kernel_shap_assert( lambda inp: torch.sum(net(inp)))
def test_sensitivity_n_fa(self) -> None: model = BasicModel_MultiLayer() fa = FeatureAblation(model) self.basic_multilayer_sensitivity_n(fa, model)
def test_simple_ig_input_linear2(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]]) self._ig_input_test_assert(net, net.linear2, inp, 0, [[0.0, 390.0, 0.0]])
def test_single_lime_scalar_int(self) -> None: net = BasicModel_MultiLayer() self._single_input_scalar_lime_assert( lambda inp: int(torch.sum(net(inp)).item()))
def test_simple_ig_input_linear1(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]], requires_grad=True) self._ig_input_test_assert(net, net.linear1, inp, (0, ), [[0.0, 100.0, 0.0]])
def test_simple_linear_gradient_activation(self) -> None: net = BasicModel_MultiLayer() inp = torch.tensor([[0.0, 100.0, 0.0]]) self._layer_activation_test_assert(net, net.linear1, inp, [90.0, 101.0, 101.0, 101.0])
def test_simple_linear_internal_inf_inplace(self) -> None: net = BasicModel_MultiLayer(inplace=True) inp = torch.tensor([[0.0, 100.0, 0.0]]) self._internal_influence_test_assert( net, net.linear1, inp, [[0.9, 1.0, 1.0, 1.0]] )