张量流或角膜的特征可视化很容易,可以在这里找到。 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却没有。
答案 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)