可视化神经网络层激活

Sar*_*han 3 tensorflow pytorch

张量流或 keras 中的特征可视化很简单,可以在这里找到。https://machinelearningmastery.com/how-to-visualize-filters-and-feature-maps-in-convolutional-neural-networks/卷积神经网络可视化 - 权重或激活?

如何在 pytorch 中做到这一点?

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

简单来说;如何将链接一代码转换为 PyTorch?如何获取 resnet18 PyTorch 中的特定层以及如何获取输入图像的激活。我在tensorflow中尝试过,它有效,但PyTorch无效。

Szy*_*zke 5

您必须在特定层上注册 PyTorch 的钩子。有关钩子的介绍,请参阅本教程。

基本上,它允许input/output捕获forward/backward进入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))
Run Code Online (Sandbox Code Playgroud)

您可以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)
Run Code Online (Sandbox Code Playgroud)