pytorch打印模型参数,冻结训练等操作 ╰半夏微凉° 2022-12-30 03:37 171阅读 0赞 ### 目录 ### * 准备工作 * 查看模型的参数 * * 方法一 * 方法二 * 方法三 * 方法四 * 查看optimizer的参数 * 冻结训练 # 准备工作 # import torch.optim as optim import torch import torchvision.models as models device=torch.device("cuda" if torch.cuda.is_available() else "cpu") model=models.resnet50(pretrained=False).to(device) optimizer=optim.Adam(model.parameters(),0.01) scheduler = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[3, 6, 10, 15, 21], gamma=1/3.) #-------------------------------- # 查看模型的参数 # ## 方法一 ## 通过torchsummary这个包,首先安装这个包, pip install torchsummary 然后 from torchsummary import summary summary(model,input_size=(3,416,416)) 结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 1] ## 方法二 ## 使用model.named\_parameters() sum=0 for name,param in model.named_parameters(): num=1 for size in param.shape: num *= size sum+=num print("{:30s} : {}".format(name,param.shape)) print("total param num {}".format(sum)) 结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 2] ## 方法三 ## 直接使用model.parameters(),但是这样看不见参数名。 for param in model.parameters(): print(param.shape) 结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 3] ## 方法四 ## 利用state\_dict,state\_dict以字典的方式保持了模型的参数名称和参数,通过遍历可以获取所有的参数。 for name in model.state_dict(): print("{:30s}:{}".format(name,model.state_dict()[name].shape)) 结果: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 4] pytorch中带有参数的不止有model,还有optimizer和lr\_scheduler,因此它们都有一个共同的属性state\_dict,所以要想查看他们的参数名称,这个方法是通用的。 # 查看optimizer的参数 # 当然,查看优化器的参数时,除了使用查看模型参数的方法四,还有以下这种方式。 #打印optimizer的参数 print("optimizer.param_groups的长度:{}".format(len(optimizer.param_groups))) for param_group in optimizer.param_groups: print(param_group.keys()) print([type(value) for value in param_group.values()]) print('查看学习率: ',param_group['lr']) 结果: optimizer.param_groups的长度:1 dict_keys(['params', 'lr', 'betas', 'eps', 'weight_decay', 'amsgrad', 'initial_lr']) [<class 'list'>, <class 'float'>, <class 'tuple'>, <class 'float'>, <class 'int'>, <class 'bool'>, <class 'float'>] 查看学习率: 0.01 # 冻结训练 # 可以选择性的冻结模型的某些层。 for layer in list(model.parameters())[:2]: layer.requires_grad=False 关于,冻结训练,可以看我这篇[文章][Link 1]。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70]: /images/20221120/8e60d70c2e7147e3adcadb7e0467dcfa.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 1]: /images/20221120/5efb80257fb844bcbb450071fd1fdf72.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 2]: /images/20221120/6419ccfcc3ce4f93aae84cee447bc93d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 3]: /images/20221120/1e3d8f7fe76941a18f1b9a5e8075fa48.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmdoYW8yMDE2MDcwMzAxMDE_size_16_color_FFFFFF_t_70 4]: /images/20221120/813fc86faea641f79d8e7e74d940c3a4.png [Link 1]: https://blog.csdn.net/yanghao201607030101/article/details/109898944?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522161078886216780271578130%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fblog.%252522%25257D&request_id=161078886216780271578130&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-109898944.pc_v1_rank_blog_v1&utm_term=%E5%86%BB%E7%BB%93%E8%AE%AD%E7%BB%83
还没有评论,来说两句吧...