卷积神经网络中间结果可视化

在PyTorch中,若要保存网络中间层的输出,需使用register_forward_hook()函数。通过创建一个类如ClassActivationData,初始化时在指定层上注册回调函数hook_fn,该函数会捕获并保存层的输出。当不再需要该回调时,调用remove()方法移除。示例中展示了如何获取并显示第二个卷积层的输出。
摘要由CSDN通过智能技术生成

pytorch默认只保存最后一层的输出,中间层输出默认不保存,要提取中间层网络输出值,需要使用回调函数register_forward_hook(),通过传入处理函数,便可以提取和保存特点网络层的输出值。

class ActivationData():
	#网络输出值
	outputs = None
	def __init__(self,layer):
		#在模型的layer_num层上注册回调函数,并传入处理函数hook_fn
		self.hook = layer.register_forward_hook(self.hook_fn)

	def hook_fn(self,module,input,output):
	self.outputs = output.cpu()

	def remove(self):
	#由回调句柄调用,用于将回调函数从网络层删除
	self.hook.remove()
#获取第二个卷积层
conv_out = ActivationOutputData(model.conv2)
#传入图片
o = model(img)
#移除回调函数
conv_out.remove()
#输出图片
for i in range(16):
	ax.imshow(conv_out.outputs[0][i].detach().numpy())

资料来源:《pytorch深度学习实战 从新手小白到数据科学家》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值