Tensorflow 可视化神经网络层激活

Tensorflow 可视化神经网络层激活,tensorflow,pytorch,Tensorflow,Pytorch,张量流或keras中的特征可视化很容易,可以在这里找到。或 如何在pytorch中执行此操作 我正在使用Pytork和预训练的resnet18模型。我只需要输入图像并激活特定层(例如Layer2.0.conv2)。第2.0.2层在预训练模型中指定 简单地说;如何将linkone代码转换为PyTorch?如何在resnet18 PyTorch中获取特定层,以及如何获取输入图像的激活。 我在tensorflow中尝试了这个,它成功了,但PyTorch没有 您必须在特定层上注册PyTorch的钩子。有

张量流或keras中的特征可视化很容易,可以在这里找到。或

如何在pytorch中执行此操作

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

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

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

基本上,它允许捕获进入
torch.nn.模块的
向前/向后
输入/输出
。整个事情可能有点复杂,有一个库与你的(免责声明我是作者)目标相似,叫做。特别是允许您做您想做的事情,请参阅下面的代码段和注释:

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))
您可以仅为
索引指定的某些层(子模块)或层类型注册
记录器,要获取必要的信息,请运行:

# 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)

非常感谢你。这真的很有帮助。您只需保存my day.recorder=torchfunc.hooks.recorders.ForwardPre()另一个问题。一旦调用记录器,我们将一些数据(图像)输入网络并绘制记录器。如果我想多次执行此操作。我应该设置不同的记录吗?你说的多次是什么意思?如果记录器已注册,则将记录通过网络的每个图像。如果您根据某些
条件保存数据,那么多个记录器将非常有用,我想这里的情况并非如此。你能详细说明一下吗?谢谢你的评论。多次通过意味着有多个图像通过网络。我观察到它记录了它,但是每个张量的维数没有任何意义。我认为它只捕获了输入张量。1) 我注册了记录器2)将两个图像传递到网络3)检查记录器,但它只显示输入张量4)例如,在resnet18中,它的输出只有3个通道,但网络输出有64个通道。如何捕获每个conv的输出而不是输入。