【Pytorch】模型摘要信息获取、模型参数获取及模型保存的三种方法

news/2024/11/28 5:26:10/

目录

  • 问题一:模型摘要信息的获取
  • 问题二:模型参数的获取
  • 问题三:模型的保存方式

问题1:我想得到模型的摘要信息,包括每一层的名称、输入尺寸、输出尺寸以及参数量。

PyTorch Summary是一个用于计算模型参数量和输出尺寸的工具库。它可以帮助你快速了解模型的结构和参数数量,以及每个层的输出形状。你可以使用torchsummary库来生成模型的摘要信息。以下是一个示例代码:

import torch
from torchvision import models
from torchsummary import summarydevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
vgg = models.vgg16().to(device)summary(vgg, (3, 224, 224))
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1         [-1, 64, 224, 224]           1,792ReLU-2         [-1, 64, 224, 224]               0Conv2d-3         [-1, 64, 224, 224]          36,928ReLU-4         [-1, 64, 224, 224]               0MaxPool2d-5         [-1, 64, 112, 112]               0Conv2d-6        [-1, 128, 112, 112]          73,856ReLU-7        [-1, 128, 112, 112]               0Conv2d-8        [-1, 128, 112, 112]         147,584ReLU-9        [-1, 128, 112, 112]               0MaxPool2d-10          [-1, 128, 56, 56]               0Conv2d-11          [-1, 256, 56, 56]         295,168ReLU-12          [-1, 256, 56, 56]               0Conv2d-13          [-1, 256, 56, 56]         590,080ReLU-14          [-1, 256, 56, 56]               0Conv2d-15          [-1, 256, 56, 56]         590,080ReLU-16          [-1, 256, 56, 56]               0MaxPool2d-17          [-1, 256, 28, 28]               0Conv2d-18          [-1, 512, 28, 28]       1,180,160ReLU-19          [-1, 512, 28, 28]               0Conv2d-20          [-1, 512, 28, 28]       2,359,808ReLU-21          [-1, 512, 28, 28]               0Conv2d-22          [-1, 512, 28, 28]       2,359,808ReLU-23          [-1, 512, 28, 28]               0MaxPool2d-24          [-1, 512, 14, 14]               0Conv2d-25          [-1, 512, 14, 14]       2,359,808ReLU-26          [-1, 512, 14, 14]               0Conv2d-27          [-1, 512, 14, 14]       2,359,808ReLU-28          [-1, 512, 14, 14]               0Conv2d-29          [-1, 512, 14, 14]       2,359,808ReLU-30          [-1, 512, 14, 14]               0MaxPool2d-31            [-1, 512, 7, 7]               0Linear-32                 [-1, 4096]     102,764,544ReLU-33                 [-1, 4096]               0Dropout-34                 [-1, 4096]               0Linear-35                 [-1, 4096]      16,781,312ReLU-36                 [-1, 4096]               0Dropout-37                 [-1, 4096]               0Linear-38                 [-1, 1000]       4,097,000
================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 218.59
Params size (MB): 527.79
Estimated Total Size (MB): 746.96
----------------------------------------------------------------

问题2:model.parameters()与model.state_dict()是干嘛的?

  1. model.parameters(): 这个方法返回一个包含模型所有可学习参数的迭代器。可学习参数包括模型的权重(weights)和偏置(biases)等需要通过梯度更新的参数。model.parameters()常用于定义优化器(optimizer)和计算梯度。

  2. model.state_dict(): 这个方法返回一个字典,包含了模型的所有状态信息。字典中的键是参数名称,值是对应参数的张量(Tensor)。model.state_dict()的主要用途是保存和加载模型。通过调用torch.save()将model.state_dict()保存为文件后,可以使用torch.load()加载模型参数并将其应用到模型中。

import torch
import torch.nn as nn# 定义一个简单的模型
class MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.fc1 = nn.Linear(5, 2)def forward(self, x):x = self.fc1(x)return x# 创建模型实例
model = MyModel()# 打印模型的可学习参数
for param in model.parameters():print(param, param.shape)print (model.state_dict())
Parameter containing:
tensor([[ 4.1945e-01,  3.8990e-01,  3.7970e-01, -1.8200e-04,  3.4936e-01],[-9.5073e-02,  8.0670e-02, -2.4634e-01, -3.7250e-01,  2.4676e-01]],requires_grad=True) torch.Size([2, 5])
Parameter containing:
tensor([ 0.3537, -0.2398], requires_grad=True) torch.Size([2])
----------
OrderedDict([('fc1.weight', tensor([[ 4.1945e-01,  3.8990e-01,  3.7970e-01, -1.8200e-04,  3.4936e-01],[-9.5073e-02,  8.0670e-02, -2.4634e-01, -3.7250e-01,  2.4676e-01]])), ('fc1.bias', tensor([ 0.3537, -0.2398]))])

问题3:Pytorch模型保存的几种方法?

模型保存的方式取决于你后续加载模型的用途。

  1. 保存模型以供自己用于推理:保存模型,恢复模型,然后将模型更改为评估模式。
torch.save(model.state_dict(), filepath)#Later to restore:
model.load_state_dict(torch.load(filepath))
model.eval()
  1. 保存模型以便稍后恢复训练:如果需要继续训练你将要保存的模型,那么需要保存的不仅仅是模型。还需要保存优化器的状态、迭代次数、评估指标等。可以这样做:
state = {'epoch': epoch,'state_dict': model.state_dict(),'optimizer': optimizer.state_dict(),...
}
torch.save(state, filepath)# 要恢复训练,并恢复每个单独对象的状态,如下所示:state = torch.load(filepath)
model.load_state_dict(state['state_dict'])
optimizer.load_state_dict(state['optimizer'])
  1. 模型被无法访问你代码的其他人使用:

torch.save(model, filepath)# Then later:
model = torch.load(filepath)

请关注博主,一起玩转人工智能及深度学习。


http://www.ppmy.cn/news/239783.html

相关文章

Databend 开源周报第 96 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 虚拟列 查询 J…

djangoo配置与运行

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

【云原生】docker-Cgroup资源限制

Docker容器的资源控制 Docker通过Cgroup 来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。Caroup 是ControlGroups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源…

Yolov3 模型构建和深入掌握快速搭建网络的搭积木方法

(一)设计Conv2dBatchLeaky 1、了解LeakyReLU激活函数 LeakyReLU 激活层,创建一个可调用对象以计算输入 x 的 LeakReLU 。其中,x为输入的 Tensor 感觉和飞桨的api有点相同,可以对照参考理解: LeakyReLU激活…

Easeui 02 tree组件.

1.添加tree组件. tree组件的位置:DataGrid and Tree(表格和树) → tree(树); 复制 tree组件到 "菜单管理"的div里面,如: 这里要动态绑定数据,所以把死数据删除,只留下一个 ul,如&am…

围棋知名AI-KataGo 下载分享

下载地址 下载链接: 围棋 提取码: 2hvp 里面有详情 这个AI 是很知名的围棋AI,并且是开源的 喜欢围棋的就去看看吧

Linux下的围棋软件,在Linux下和电脑下围棋

这几天笔记本C盘硬盘坏了,进不了Windows了,也就没法上弈城或TOM之类的对弈平台了,硬盘要过几天才能换新的,这几天就只能进Fedora core6了,由于里面一直没有装有关围棋的软件,这次趁这个机会就找了一个可以打…

围棋AI安装与测试

2016年,Alphago横跨出世,4比1战胜李世石,正式标志围棋AI战胜人类顶尖棋手(此前围棋最强的软件大致是zen和疯石,有业余强五的水平)。而后Deepmind又推出了Alphago升级版master,对人类顶尖高手达成60连胜&…