可视化神经网络层激活

时间:2019-11-24 08:39:29

标签: tensorflow pytorch

张量流或角膜的特征可视化很容易,可以在这里找到。 https://machinelearningmastery.com/how-to-visualize-filters-and-feature-maps-in-convolutional-neural-networks/Convolutional Neural Network visualization - weights or activations?

如何在pytorch中执行此操作?

我正在使用带有预训练的resnet18模型的PyTorch。我只需要输入图像并激活特定图层(例如Layer2.0.conv2)。在预训练模型中指定了Layer2.0.conv2。

简单来说;如何将链接代码转换为PyTorch?如何获取resnet18 PyTorch中的特定图层以及如何获取输入图像的激活。 我在tensorflow中尝试了这个方法,但没有成功,但PyTorch却没有。

1 个答案:

答案 0 :(得分:2)

您必须在特定层上注册PyTorch的钩子。有关钩子的介绍,请参见this tutorial

基本上,它可以捕获input/output中进入forward/backward的{​​{1}}中的torch.nn.Module。整个过程可能有点复杂,存在一个目标与您相似的库(免责声明,我是作者),名为torchfunc。特别是torchfunc.hooks.recorder允许您执行所需操作,请参见下面的代码段和注释:

import torchvision
import torchfunc

my_network = torchvision.resnet18(pretrained=True)
# Recorder saving inputs to all submodules
recorder = torchfunc.hooks.recorders.ForwardPre()

# Will register hook for all submodules of resnet18
# You could specify some submodules by index or by layer type, see docs
recorder.modules(my_networks)

# Push example image through network
my_network(torch.randn(1, 3, 224, 224))

您只能register记录index或图层类型指定的某些图层(子模块),以获取必要的信息,运行:

# Zero image before going into the third submodule of this network
recorder.data[3][0]

# You can see all submodules and their positions by running this:    
for i, submodule in enumerate(my_network.modules()):
    print(i, submodule)

# Or you can just print the network to get this info
print(my_network)