ResNet50修改网络适应灰度图片并加载预训练模型
此博文是修改https://blog.csdn.net/jiacong_wang/article/details/105631229
这位大大的博文而成的,自己根据自己的情况稍微加了点东西
要修改的地方有4处
1.修改网络第一层,把3通道改为1
法一:直接在定义网络的地方修改
self.conv1 = nn.Conv2d(1, self.in_channel, kernel_size=7, stride=2,padding=3, bias=False)
法二:在调用网络模型的地方修改
model = resnet50()
model.conv1 = nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
model = model.to(device)
2.修改读取数据的方式
--------修改之前:
--------修改之后
train_transformer = transforms.Compose([transforms.Grayscale(1), # 修改transforms.RandomHorizontalFlip(0.5), transforms.ToTensor(), transforms.Normalize(0.485, 0.229, inplace=True), # 修改(-1,1)])
- 修改方法
- 修改transform(图像预处理操作)
添加transforms.Grayscale(1),将图像转换为单通道图像(经实验,图像矩阵的数据并不会发生变化) - transforms.Normalize修改如下,第一个参数为mean,第二个参数为std,因为是单通道,所以进行Z-Score时仅需要对一个通道进行操作,所以mean和std只需要一个值就行
3.修改读取数据集部分(mydataset.py)
-----修改之前
-----修改之后
img = Image.open(path_img)
只需要把后面转RGB的部分去掉就行
4.因为加载预训练模型而修改网络
要加载预训练模型,第一层的权重参数肯定不能加载,则只需要把第一层的权重参数避开就行:
- 加载方法
net = resnet50()# load pretrain weights# download url: https://download.pytorch.org/models/resnet34-333f7ec4.pthmodel_weight_path = "./resnet50-19c8e357.pth"assert os.path.exists(model_weight_path), "file {} does not exist.".format(model_weight_path)# 加载预训练模型并且把不需要的层去掉pre_state_dict = torch.load(model_weight_path)print("原模型", pre_state_dict.keys())new_state_dict = {}for k, v in net.state_dict().items(): # 遍历修改模型的各个层print("新模型", k)if k in pre_state_dict.keys() and k!= 'conv1.weight':new_state_dict[k] = pre_state_dict[k] # 如果原模型的层也在新模型的层里面, 那新模型就加载原先训练好的权重net.load_state_dict(new_state_dict, False)# for param in net.parameters():# param.requires_grad = False# change fc layer structurein_channel = net.fc.in_featuresnet.fc = nn.Linear(in_channel, 5)net.to(device)
ResNet50修改网络适应灰度图片并加载预训练模型相关推荐
- keras冻结_Keras 实现加载预训练模型并冻结网络的层
在解决一个任务时,我会选择加载预训练模型并逐步fine-tune.比如,分类任务中,优异的深度学习网络有很多. ResNet, VGG, Xception等等... 并且这些模型参数已经在imagen ...
- Pytorch网络模型权重初始化、保存与加载模型、加载预训练模型、按需设置学习率
前言 在我们对神经网络模型进行训练时,往往需要对模型进行初始化或者加载预训练模型.本文将对模型的权重初始化与加载预训练模型做一个学习记录,以便后续查询使用. 权重初始化 常见的初始化方法 PyTorc ...
- MXNet快速入门之训练加载预训练模型(四)
前言 在前面几篇文章中详细介绍了MXNet的一些特点以及入门基础知识,本篇文章主要介绍如何使用MXNet来训练模型.加载模型进行预测.预训练模型以及MXNet中GPU使用的相关知识. 在介绍训练模型之 ...
- Caffe2教程实例,加载预训练模型
Caffe2教程实例,加载预训练模型 概述 本教程使用模型库中的预训练模型squeezenet 里分类我们自己的图片.我们需要提供要分类图片的路径或者URL信息作为输入.了解ImageNet对象代码可 ...
- pytorch:加载预训练模型(多卡加载单卡预训练模型,多GPU,单GPU)
在pytorch加载预训练模型时,可能遇到以下几种情况. 分为以下几种 在pytorch加载预训练模型时,可能遇到以下几种情况. 1.多卡训练模型加载单卡预训练模型 2. 多卡训练模型加载多卡预训练模 ...
- HuggingFace学习3:加载预训练模型完成机器翻译(中译英)任务
加载模型页面为:https://huggingface.co/liam168/trans-opus-mt-zh-en 文章目录 整理文件 跑通程序,测试预训练模型 拆解Pipeline,逐步进行翻译任 ...
- 加载预训练模型时报错 KeyError: param ‘initial_lr‘ is not specified in param_groups[0]
在加载预训练模型继续训练时,程序报错:KeyError: "param 'initial_lr' is not specified in param_groups[0] when resum ...
- Python网络爬虫之图片懒加载技术、selenium和PhantomJS
引入 今日概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 今日详情 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材ht ...
- 解决HuggingFace加载预训练模型时报错TypeError: expected str, bytes or os.PathLike object, not NoneType
完整报错: TypeError: expected str, bytes or os.PathLike object, not NoneType 解决方法 检查下载的组件: 步骤1:完整的下载组件,包 ...
- Tensorflow加载预训练模型和保存模型(ckpt文件)以及迁移学习finetuning
使用tensorflow过程中,训练结束后我们需要用到模型文件.有时候,我们可能也需要用到别人训练好的模型,并在这个基础上再次训练.这时候我们需要掌握如何操作这些模型数据.看完本文,相信你一定会有收获 ...
最新文章
- 重返全球第三,小米做对了什么?
- 使用IBMMQ时的那些事
- 字符流复制Java文件改进版
- javafx 调用java_Java“地铁”表(JavaFX)
- html网页响应时间调试,HTML5 使用performance.now衡量Webworker的响应时间
- 晶振两端的谐振电容有特殊要求吗_干货 | 晶振电路设计诀窍
- 【软件领域知识整理】贵金属交易的K线图解释(二)
- github 改善网速
- 正则化、岭回归与LASSO回归(套索回归)
- 别让这个时代越来越冷漠
- 解决 Eclipse不支持tomcat9
- jmf608硬盘修复_JMF608固态硬盘主控 SSD套料 SSD电路板 SATA3 封装BGA152|TSOP48
- python 游戏(记忆拼图Memory_Puzzle)
- 分享|数智化转型咨询赋能白皮书2021(附PDF)
- YUV420视频上面添加字幕
- Axure长页面滚动拖动制作
- xUnit安装及注意事项
- 网络流——最大流问题
- linux 实时性 100ms,实时录播延迟长达100ms
- 梦里什么都有(状压DP)