这篇文章给大家分享的是有关pytorch如何获取层权重,对特定层注入hook, 提取中间层输出的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
如下所示:
#获取模型权重 for k, v in model_2.state_dict().iteritems(): print("Layer {}".format(k)) print(v)
#获取模型权重 for layer in model_2.modules(): if isinstance(layer, nn.Linear): print(layer.weight)
#将一个模型权重载入另一个模型 model = VGG(make_layers(cfg['E']), **kwargs) if pretrained: load = torch.load('/home/huangqk/.torch/models/vgg19-dcbb9e9d.pth') load_state = {k: v for k, v in load.items() if k not in ['classifier.0.weight', 'classifier.0.bias', 'classifier.3.weight', 'classifier.3.bias', 'classifier.6.weight', 'classifier.6.bias']} model_state = model.state_dict() model_state.update(load_state) model.load_state_dict(model_state) return model
# 对特定层注入hook def hook_layers(model): def hook_function(module, inputs, outputs): recreate_image(inputs[0]) print(model.features._modules) first_layer = list(model.features._modules.items())[0][1] first_layer.register_forward_hook(hook_function)
#获取层 x = someinput for l in vgg.features.modules(): x = l(x) modulelist = list(vgg.features.modules()) for l in modulelist[:5]: x = l(x) keep = x for l in modulelist[5:]: x = l(x)
# 提取vgg模型的中间层输出 # coding:utf8 import torch import torch.nn as nn from torchvision.models import vgg16 from collections import namedtuple class Vgg16(torch.nn.Module): def __init__(self): super(Vgg16, self).__init__() features = list(vgg16(pretrained=True).features)[:23] # features的第3,8,15,22层分别是: relu1_2,relu2_2,relu3_3,relu4_3 self.features = nn.ModuleList(features).eval() def forward(self, x): results = [] for ii, model in enumerate(self.features): x = model(x) if ii in {3, 8, 15, 22}: results.append(x) vgg_outputs = namedtuple("VggOutputs", ['relu1_2', 'relu2_2', 'relu3_3', 'relu4_3']) return vgg_outputs(*results)
1.PyTorch是相当简洁且高效快速的框架;2.设计追求最少的封装;3.设计符合人类思维,它让用户尽可能地专注于实现自己的想法;4.与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新;5.PyTorch作者亲自维护的论坛 供用户交流和求教问题6.入门简单
感谢各位的阅读!关于“pytorch如何获取层权重,对特定层注入hook, 提取中间层输出”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。