加载预训练模型方法

只需要将预训练网络和新网络的键值对拿出来作比较,将新网络中没有的键值对去掉,然后再更新网络权重即可,代码如下:


#加载model,model是自己定义好的模型
resnet50 = models.resnet50(pretrained=True) 
model =Net(...) 
 
#读取参数 预训练参数和当前网络参数
pretrained_dict =resnet50.state_dict() 
model_dict = model.state_dict() 
 
#将pretrained_dict里不属于model_dict的键剔除掉 
pretrained_dict =  {k: v for k, v in pretrained_dict.items() if k in model_dict} 
 
# 更新现有的model_dict 
model_dict.update(pretrained_dict) 
 
# 加载我们真正需要的state_dict 
model.load_state_dict(model_dict)  

### 如何在Python中加载预训练模型 在Python环境中,利用深度学习库如PyTorch或TensorFlow来加载预训练模型是一项常见的操作。对于图像分类任务而言,在这些框架下获取并应用预训练权重相对简单。 #### 使用PyTorch加载预训练模型 借助于`torchvision.models`模块,可以直接访问许多已经预先训练好的网络架构及其对应的参数文件。下面是一段用于加载ResNet50这一经典卷积神经网络作为例子的代码片段: ```python import torchvision.models as models # 加载带有ImageNet数据集上预训练权重的resnet50模型 model = models.resnet50(pretrained=True) # 将模型设置为评估模式(关闭dropout等) model.eval() ``` 这段代码展示了怎样简便地初始化一个具有特定配置并且其内部参数已经被优化过的实例[^1]。 #### 预处理输入图片以便喂入模型 为了让新采集的数据能够被上述预训练模型接受,通常还需要对其进行标准化等一系列变换。这里给出一段简单的预处理流程实现方式: ```python from PIL import Image from torchvision import transforms preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) img = Image.open("input.jpg") # 打开一张测试用图 img_t = preprocess(img) # 应用转换链表得到张量形式的结果 batch_t = torch.unsqueeze(img_t, 0) # 添加批次维度以匹配预期输入形状 ``` 此部分说明了针对单幅RGB彩色照片执行必要的调整措施,使其尺寸、通道数以及数值范围都符合目标模型的要求。 #### 进行推理与解码预测结果 完成以上准备工作之后就可以调用`.forward()`方法或者直接传参给模型对象来进行前向传播计算;随后再依据具体情况解析输出值所代表的意义: ```python output = model(batch_t) _, indices = torch.sort(output, descending=True) percentage = torch.nn.functional.softmax(output, dim=1)[0] * 100 print([(idx.item(), percentage[idx].item()) for idx in indices[0][:5]]) ``` 该段脚本实现了对一批次样本做推断运算,并选取最有可能属于各个类别的标签编号连同置信度一起打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值