jacobgil / pytorch-grad-cam

Advanced AI Explainability for computer vision. Support for CNNs, Vision Transformers, Classification, Object detection, Segmentation, Image similarity and more.
https://jacobgil.github.io/pytorch-gradcam-book
MIT License
10.42k stars 1.55k forks source link

error when using for densenet121, for 2 output classes. #394

Open aryan-at-ul opened 1 year ago

aryan-at-ul commented 1 year ago
grayscale_cam = cam(input_tensor=input_tensor, targets=targets)

File "/home/melkor/projects/pytorch-grad-cam/pytorch_grad_cam/base_cam.py", line 188, in call return self.forward(input_tensor, File "/home/melkor/projects/pytorch-grad-cam/pytorch_grad_cam/base_cam.py", line 95, in forward cam_per_layer = self.compute_cam_per_layer(input_tensor, File "/home/melkor/projects/pytorch-grad-cam/pytorch_grad_cam/base_cam.py", line 127, in compute_cam_per_layer cam = self.get_cam_image(input_tensor, File "/home/melkor/projects/pytorch-grad-cam/pytorch_grad_cam/base_cam.py", line 50, in get_cam_image weights = self.get_cam_weights(input_tensor, File "/home/melkor/projects/pytorch-grad-cam/pytorch_grad_cam/grad_cam.py", line 22, in get_cam_weights return np.mean(grads, axis=(2, 3)) File "<__array_function__ internals>", line 180, in mean File "/home/melkor/miniconda3/envs/graph-classificatio/lib/python3.9/site-packages/numpy/core/fromnumeric.py", line 3474, in mean return _methods._mean(a, axis=axis, dtype=dtype, File "/home/melkor/miniconda3/envs/graph-classificatio/lib/python3.9/site-packages/numpy/core/_methods.py", line 167, in _mean rcount = _count_reduce_items(arr, axis, keepdims=keepdims, where=where) File "/home/melkor/miniconda3/envs/graph-classificatio/lib/python3.9/site-packages/numpy/core/_methods.py", line 76, in _count_reduce_items items *= arr.shape[mu.normalize_axis_index(ax, arr.ndim)] numpy.AxisError: axis 2 is out of bounds for array of dimension 0

target_layers = [model.features[-1]] # as mentioned in example, #[BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)]. densenet121

target = 0 or 1 targets = [ClassifierOutputTarget(target)]

jacobgil commented 1 year ago

How many output neurons does the model have in this case? Is it 1 or 2? If 1 (representing two classes), you can use https://github.com/jacobgil/pytorch-grad-cam/blob/master/pytorch_grad_cam/utils/model_targets.py#L26

from pytorch_grad_cam.utils.model_targets import  BinaryClassifierOutputTarget
siddharth1712 commented 1 year ago

Hi, I am getting the same error. I have 2 output neurons in my case

JVedant commented 1 year ago

Hey, did anyone find a solution to this? this is roadblock for me as well.

wujiang0156 commented 9 months ago

numpy.AxisError: axis 2 is out of bounds for array of dimension 2

I meet the same question, do you solve it? thanks

tongchangD commented 5 months ago

How to add it to training as a loss