# Visualize feature map

**URL:** <https://discuss.pytorch.org/t/visualize-feature-map/29597>\
**Category:** vision\
**Created:** [November 14, 2018, 4:33pm UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597 "2018-11-14T16:33:18Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![ptrblck](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/ptrblck/32/1823_2.png) [@ptrblck](https://discuss.pytorch.org/u/ptrblck)\
**Post date:** [March 12, 2020, 4:59am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/42 "2020-03-12T04:59:27Z")

</div>

No need to change the definition.  
Instead of accessing e.g. `model.conv2` you could use `model.layer1[0]` to get the first `nn.Conv3d` layer.

---

<div class="post-metadata">

**Author:** ![saba](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/saba/32/19439_2.png) [@saba](https://discuss.pytorch.org/u/saba)\
**Post date:** [March 12, 2020, 5:12am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/43 "2020-03-12T05:12:32Z")

</div>

should be like this?

```auto
# Visualize conv filter
kernels = model.layer[0].detach()
fig, axarr = plt.subplots(kernels.size(0))
for idx in range(kernels.size(0)):
    axarr[idx].imshow(kernels[idx].squeeze())

```

correct?

---

<div class="post-metadata">

**Author:** ![saba](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/saba/32/19439_2.png) [@saba](https://discuss.pytorch.org/u/saba)\
**Post date:** [March 12, 2020, 5:19am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/44 "2020-03-12T05:19:18Z")

</div>

it give me error. could you please help me ☹  
AttributeError: ‘ConvNetRedo1’ object has no attribute ‘layer’

---

<div class="post-metadata">

**Author:** ![ptrblck](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/ptrblck/32/1823_2.png) [@ptrblck](https://discuss.pytorch.org/u/ptrblck)\
**Post date:** [March 12, 2020, 5:29am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/45 "2020-03-12T05:29:47Z")

</div>

No, use my code snippet from above with forward hooks:

```python
# Visualize feature maps
activation = {}
def get_activation(name):
    def hook(model, input, output):
        activation[name] = output.detach()
    return hook

model.layer[0].register_forward_hook(get_activation('conv1'))
data, _ = dataset[0]
data.unsqueeze_(0)
output = model(data)

act = activation['conv1'].squeeze()
fig, axarr = plt.subplots(act.size(0))
for idx in range(act.size(0)):
    axarr[idx].imshow(act[idx])

```

---

<div class="post-metadata">

**Author:** ![saba](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/saba/32/19439_2.png) [@saba](https://discuss.pytorch.org/u/saba)\
**Post date:** [March 12, 2020, 5:56am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/46 "2020-03-12T05:56:29Z")

</div>

the same error :  
AttributeError: ‘ConvNetRedo1’ object has no attribute ‘layer’

---

<div class="post-metadata">

**Author:** ![ptrblck](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/ptrblck/32/1823_2.png) [@ptrblck](https://discuss.pytorch.org/u/ptrblck)\
**Post date:** [March 12, 2020, 6:01am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/47 "2020-03-12T06:01:37Z")

</div>

Use `model.layer1[0]` instead.

---

<div class="post-metadata">

**Author:** ![saba](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/saba/32/19439_2.png) [@saba](https://discuss.pytorch.org/u/saba)\
**Post date:** [March 12, 2020, 8:23am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/50 "2020-03-12T08:23:13Z")

</div>

it is solved many thanks

---

<div class="post-metadata">

**Author:** ![Lewis\_Morris](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/lewis_morris/32/22979_2.png) [@Lewis\_Morris](https://discuss.pytorch.org/u/Lewis_Morris)\
**Post date:** [May 11, 2020, 10:42am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/51 "2020-05-11T10:42:30Z")

</div>

I’ve made a package for this [MapExtrackt](https://pypi.org/project/mapextrackt/) if any one is interested.

---

<div class="post-metadata">

**Author:** ![achyut-srivastava](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/achyut-srivastava/32/29600_2.png) [@achyut-srivastava](https://discuss.pytorch.org/u/achyut-srivastava)\
**Post date:** [May 20, 2020, 1:46pm UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/52 "2020-05-20T13:46:13Z")

</div>

![pytorch_1](https://discuss.pytorch.org/uploads/default/original/3X/1/a/1a97978778be9f4e407c3c46a0200f9e8c6239a0.png)

You can use something like this to visualize all the filter of that particular layer

---

<div class="post-metadata">

**Author:** ![sudonto](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/sudonto/32/23727_2.png) [@sudonto](https://discuss.pytorch.org/u/sudonto)\
**Post date:** [May 26, 2020, 3:32pm UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/53 "2020-05-26T15:32:29Z")

</div>

Nice package! Is it compatible with 3DCNN as well?

---

<div class="post-metadata">

**Author:** ![sudonto](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/sudonto/32/23727_2.png) [@sudonto](https://discuss.pytorch.org/u/sudonto)\
**Post date:** [June 5, 2020, 2:42am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/54 "2020-06-05T02:42:47Z")

</div>

Hi @ptrblck, if I have model like this:

 ![Untitled](https://discuss.pytorch.org/uploads/default/original/3X/8/2/82a6737119994232230252452b7fd38bebf81a86.png)

I want to visualize output from “Mul”, what should I do? I dont think that `get_activation('Mul')` will work.  
Thanks

---

<div class="post-metadata">

**Author:** ![ptrblck](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/ptrblck/32/1823_2.png) [@ptrblck](https://discuss.pytorch.org/u/ptrblck)\
**Post date:** [June 5, 2020, 4:58am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/55 "2020-06-05T04:58:25Z")

</div>

You could either return this activation in your forward (or store in a `list` or `dict`), if it’s a functional call.  
On the other hand, if this `Mul` operation is performed in an `nn.Module`, you could use forward hooks directly.

---

<div class="post-metadata">

**Author:** ![sudonto](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/sudonto/32/23727_2.png) [@sudonto](https://discuss.pytorch.org/u/sudonto)\
**Post date:** [June 5, 2020, 5:14am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/56 "2020-06-05T05:14:56Z")

</div>

Hi @ptrblck, thanks for you reply, I actually can’t get your point. But here is my code:

 ![Untitled](https://discuss.pytorch.org/uploads/default/original/3X/b/d/bd475aad9631fa1f4bbea7a4ddfe61b45e021cac.png)

I multiply `out` with `x` using `*` operator. So, how to get the output of this multiplication?

---

<div class="post-metadata">

**Author:** ![ptrblck](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/ptrblck/32/1823_2.png) [@ptrblck](https://discuss.pytorch.org/u/ptrblck)\
**Post date:** [June 5, 2020, 6:27am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/57 "2020-06-05T06:27:28Z")

</div>

You could use:

```python
def forward(self, x):
    ...
    act = out * x
    out = act + x
    return out, out1

```

to return the intermediate output of the multiplication together with the last output.

Alternatively you could also store `act` inside the module in a list via `self.acts.append(out.detach())` or a global list etc.

---

<div class="post-metadata">

**Author:** ![Blueberry](https://discuss.pytorch.org/letter_avatar_proxy/v4/letter/b/54ee81/32.png) [@Blueberry](https://discuss.pytorch.org/u/Blueberry)\
**Post date:** [July 12, 2020, 4:56pm UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/58 "2020-07-12T16:56:30Z")

</div>

@Lewis_Morris Can you provide example code for using this package on self defined conv2d models?

---

<div class="post-metadata">

**Author:** ![Lewis\_Morris](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/lewis_morris/32/22979_2.png) [@Lewis\_Morris](https://discuss.pytorch.org/u/Lewis_Morris)\
**Post date:** [July 16, 2020, 3:04am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/59 "2020-07-16T03:04:55Z")

</div>

It _should_ work the same way as in the examples on GitHub. That being said someone who has used it has found that it didn’t work when the input had more than 4 channels. So I’ve tweaked it to work for them. If you are experiencing issues open an issue on git and I’d be more than happy to help. 👌

---

<div class="post-metadata">

**Author:** ![T\_Dinh](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/t_dinh/32/26831_2.png) [@T\_Dinh](https://discuss.pytorch.org/u/T_Dinh)\
**Post date:** [July 17, 2020, 1:44pm UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/60 "2020-07-17T13:44:15Z")

</div>

Nice! Very easy to use package.

---

<div class="post-metadata">

**Author:** ![Lulixter](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/lulixter/32/12040_2.png) [@Lulixter](https://discuss.pytorch.org/u/Lulixter)\
**Post date:** [July 24, 2020, 9:46am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/61 "2020-07-24T09:46:19Z")

</div>

hi, i have the same problem, how did you solve it? Thanks

---

<div class="post-metadata">

**Author:** ![Lewis\_Morris](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/lewis_morris/32/22979_2.png) [@Lewis\_Morris](https://discuss.pytorch.org/u/Lewis_Morris)\
**Post date:** [July 25, 2020, 7:43pm UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/63 "2020-07-25T19:43:07Z")

</div>

What issue did you have? Email me or open an issue on git hub and I’ll take a look

---

<div class="post-metadata">

**Author:** ![saba](https://discuss.pytorch.org/user_avatar/discuss.pytorch.org/saba/32/19439_2.png) [@saba](https://discuss.pytorch.org/u/saba)\
**Post date:** [August 20, 2020, 2:04am UTC](https://discuss.pytorch.org/t/visualize-feature-map/29597/64 "2020-08-20T02:04:07Z")

</div>

HI Ptrblck,

Sorry I want to see the outputs of the defined generator for each layer. Would you please help me how I can reach them to display?

```auto
class Generator994(nn.Module):
    def __init__ (self,ngpu,nz,ngf):
        super(Generator994, self). __init__ ()
        self.ngpu=ngpu
        self.nz=nz
        self.ngf=ngf
        self.main = nn.Sequential(
            # input is Z, going into a convolution
            nn.ConvTranspose2d(self.nz, self.ngf * 8, 3, 1, 0, bias=False),
            nn.BatchNorm2d(self.ngf * 8),
            nn.ReLU(True),
            # state size. (ngf*8) x 4 x 4
            nn.ConvTranspose2d(self.ngf * 8, self.ngf * 4, 3, 1, 0, bias=False),
            nn.BatchNorm2d(self.ngf * 4),
            nn.ReLU(True),
            # state size. (ngf*4) x 8 x 8
            nn.ConvTranspose2d( self.ngf * 4, self.ngf * 2, 3, 1, 0, bias=False),
            nn.BatchNorm2d(self.ngf * 2),
            nn.ReLU(True),
            # state size. (ngf*2) x 16 x 16
            nn.ConvTranspose2d( self.ngf*2, 1, 3, 1, 0, bias=False),nn.Sigmoid()

        )

    def forward(self, input):
        return self.main(input)

```

[Previous page](https://discuss.pytorch.org/t/visualize-feature-map/29597.md?page=2)

[Next page](https://discuss.pytorch.org/t/visualize-feature-map/29597.md?page=4)
