之前做的一些项目中涉及到功能映射可视化的问题,一个层中特征映射的数量往往就是当前层out_channels的值,我们可以通过以下代码可视化自己网络中某层地图的功能,个人感觉可视化特征地图对调参还是很有用的。
<强>不多说了,直接看代码:强>
进口火炬 从火炬。autograd导入变量 进口火炬。神经网络是神经网络 进口泡菜 从系统导入路径 路径。追加(“/剩余模型路径”) 进口residual_model 从residual_model进口residual_model 模型=Residual_Model () model.load_state_dict (torch.load (’。/model.pkl ')) 类myNet (nn.Module): def __init__(自我、pretrained_model层): 超级(myNet自我). __init__ () self.net1=nn.Sequential(*列表(pretrained_model.children())[:层[0]]) self.net2=nn.Sequential(*列表(pretrained_model.children())[:层[1]]) self.net3=nn.Sequential(*列表(pretrained_model.children())[:层[2]]) def向前(自我,x): 着干活=self.net1 (x) out2=self.net(着干活) out3=self.net (out2) 返回着干活,out2 out3 def get_features (pretrained_model x层=[3、4、9]):# # get_features其实很简单 “‘ 1.首先导入模型 2.将重量负荷进模型 3.熟悉模型的每一层的位置,提前知道要输出特征映射的网络层是处于网络的那一层 4 .直接将test_x输入网络,*列表(model.chidren())是用来提取网络的每一层的结构的.net1=nn.Sequential(*列表(pretrained_model.children())[:层[0]]),就是第三层前的所有层。 “‘ net1=nn.Sequential(*列表(pretrained_model.children())[:层[0]]) #打印net1 着干活=net1 (x) net2=nn.Sequential(*列表(pretrained_model.children())(层[0]:层[1]]) #打印net2 out2=net2(着干活) # net3=nn.Sequential(*列表(pretrained_model.children())(层[1]:层[2]]) # out3=net3 (out2) 返回着干活,out2 张开(‘test.pickle’,‘rb) f: data=https://www.yisu.com/zixun/pickle.load (f) 数据[x=' test_main '] [0] x=变量(torch.from_numpy (x)) .view (1128 1) # # test_x必须为Varibable # x=变量(torch.randn (1128 1)) 如果torch.cuda.is_available (): x=x.cuda() #如果模型的训练是用cuda加速的话,输入的变量也必须是cuda加速的,两个必须是对应的,网络的参数重量都是用cuda加速的,不然会报的错 模型=model.cuda () output1 output2=get_features(模型中,x) # #模型是训练好的模型,前面已经导入进来了剩余模型 打印(output1.shape:, output1.shape) 打印(output2.shape:, output2.shape) #打印(output3.shape:, output3.shape) output_1=火炬。挤压(output2昏暗=0) .numpy output_1_arr=output_1.data.cpu()() #得到的cuda加速的输出不能直接转变成numpy格式的,当时根据报错的信息首先将变量转换为cpu的,然后转换为numpy的格式 output_1_arr=output_1_arr.reshape ([output_1_arr.shape [0], output_1_arr.shape [1]]) >之前以上这篇pytorch可视化特征映射的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
pytorch可视化特征映射的示例代码