pytorch加载与修改预训练模型

2023-05-16

pytorch加载与修改预训练模型

有时会希望用预训练的模型来fine-tune或是作为初始化(毕竟初始化权重真的玄学…),但是不需要其中某一些层,这时候就需要对加载的预训练模型做一些修改。

如果已经知道了模型的结构,这件事还是比较容易的,不知道的话我就不会了。

import torch
import torch.nn as nn 
import torchvision
from torchstat import stat
class resnet18_new(nn.Module):
    def __init__(self):
        super(resnet18_new,self).__init__()
        pretrained_net=torchvision.models.resnet18()        
        pretrained_layers=pretrained_net.children()
        layers=list(pretrained_layers)[:-1]
        # for i in range(len(list(pretrained_layers))-1):
            # layers.append(pretrained_layers[i])
        self.net=nn.Sequential(*layers)
        self.fc=nn.Linear(512,10)

    def forward(self,x):
        x=self.net(x)
        x=x.view(x.shape[0],-1)
        x=self.fc(x)
        return x
if __name__=='__main__':    
    model=resnet18_new()
    stat(model,(3,32,32))

首先我先用.children()获取了一下模型中所有的layer,这里说明一下.children()与.modules()的区别:

.children()只会按顺序获取__init()__里的所有layer,而.module()不但会获取__init()__里的所有layer,还会把nn.sequential里的所有layer也拆开获取,直到不能再拆为止。所以说定义时最好按照网络连接的顺序来…

获取了所有的layer之后,就可以把转成list,选择自己想要的层了,不用担心权重或者连接的问题,layer内部的结构和权重都能被保留,但是写在forward中的结构可能就无法保留了,尽量写在__init()__会容易再利用一些(这个事情后面我再验证吧,因为转成了list,我觉得应该就留不下来了)。

如果很清楚模型的结构,其实也可以用.modules()把想要的层的权重取出来(.state_dict()),然后再放到自己的模型里(.load_state_dict()),就是比较麻烦,但是结构肯定是对的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytorch加载与修改预训练模型 的相关文章

  • 使用moment.js时设置中文无效

    背景 xff1a 使用 script 标签 xff0c 在 html 页面中引入了 moment js xff0c 使用时发现页面中 moment js 相关的文字显示的是英文 xff08 eg xff1a 3 days ago xff09
  • virtual stdio 2017 问题

    严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB8020 无法找到 Visual Studio 2010 的生成工具 平台工具集 61 v100 若要使用 v100 生成工具进行生成 xff0c 请安装 Visual Stud
  • 中国天气网天气api接口 天气预报调用方法 2020

    说明 百度了很久没有找到免费的天气 API 不是收费就是接口打不开了 最后终于找到了天气api https www tianqiapi com 可免费使用 最重要的是天气数据和中国天气网一致 城市编号也是用的天气网的 这样就方便多了 体验了
  • [路由][教程]OpenWrt通过LAN连接上级路由做交换机+无线功能教程

    1 前言 上级路由为ikuai软路由 xff0c 数据处理交给软路由来做 xff0c OpenWrt运行在路由器上 xff0c 通过LAN连接上级路由从而只做WIFI接收发送功能 此教程只能将LAN作为交换机使用 xff0c WAN口不行
  • [路由][教程]OpenWrt设置为交换机+无线功能教程

    1 前言 上级路由为ikuai软路由 xff0c 数据处理交给软路由来做 xff0c OpenWrt运行在路由器上 xff0c 通过LAN连接上级路由从而只做WIFI接收发送功能 2 需求 路由的LAN和WAN全部作为交换机使用无线WIFI
  • CV学习笔记-特征提取

    特征提取 1 概述 图像中常见的特征有边缘 角 区域等 通过各属性间的关系 xff0c 改变原有的特征空间 xff0c 例如组合不同的属性得到新的属性 xff0c 这样的处理叫做特征提取 注意特征选择是从原始的特征数据集中选择出子集 xff
  • CV学习笔记-深度学习

    深度学习 1 神经网络 1 概述 引例 xff1a 生物神经网络作用机理 生物神经网络的基本工作原理 xff1a 一个神经元的输入端有多个树突 xff0c 主要是用来接收输入信息的 输入信息经过突触处理 xff0c 将输入的信 息累加 xf
  • Mybatis-Plus条件构造器笔记

    Mybatis Plus条件构造器笔记 Mybatis Plus官方文档 xff1a https baomidou com pages 10c804 本文主要讨论Mybatis Plus条件构造器的区别和用法 QueryWrapper Up
  • 日常刷题 (0)

    牛客刷题 1 即使不进行强制类型转换 xff0c 在进行指针赋值运算时 xff0c 指针变量的基类型也可以不同 xff1f 答 xff1a 错 xff0c 指针变量的赋值只能赋予地址 xff0c 决不能赋予任何其它数据 xff0c 否则将引
  • coursera C程序进阶 第二周 #6

    题目 xff1a 流感传染 有一批易感人群住在网格状的宿舍区内 xff0c 宿舍区为n n的矩阵 xff0c 每个格点为一个房间 xff0c 房间里可能住人 xff0c 也可能空着 在第一天 xff0c 有些房间里的人得了流感 xff0c
  • 大数据学习路线图(旧)

    一 入门准备 1 linux操作基础 1 Linux的介绍 xff0c Linux的安装 xff1a VMware Workstation虚拟软件安装过程 CentOS虚拟机安装过程 2 Linux的常用命令 xff1a 常用命令的介绍 常
  • Linux网络编程:状态机

    Linux网络编程 xff1a 状态机 状态机基本概念介绍状态机的特征状态机的要素注意 xff01 为什么在网络编程中需要状态机 xff1f 状态机基本概念介绍 首先我们简单的介绍一下状态机的基本概念 有限状态机是一种用来进行对象行为建模的
  • Ubuntu 20.04 安装 cuda9.0不成功如何解决

    cuda9 0需要低版本gcc才能兼容 xff0c 试了很多教程 xff0c 最终参考以下链接安装成功 xff0c 粗略记录一下 xff0c 免得下次又采坑 1 安装低版本gcc xff1a gcc 5 4 0 参考以下链接 xff1a 不
  • (八)linux中断实现

    目录 一 linux中断的实现二 中断号三 中断的标志四 中断源对应的中断服务程序五 中断服务程序与原子上下文六 等待队列七 附录 一 linux中断的实现 span class token macro property span clas
  • i3wm 屏幕配置踩坑

    i3wm 屏幕配置踩坑 前言踩坑 前言 自从18 19年开始正式使用linux作为我的开发系统就一直没有换回windows 从一开始的 ubuntu 到后来的manjaro 感觉越来越有意思可玩性很高 至于我我什么不换回windows 原因
  • 这个Python库太强了,竟然能把图片,视频无损清晰放大!

    这几天在逛GitHub的时候发现了一个非常牛逼的库 xff0c 竟然有逆天的功能 xff0c 一个用Python做的库 xff0c 利用机器学习算法把图片无损的放大很多倍 这个库叫video2x xff0c 目前收获1500颗星 xff0c
  • 字符串和枚举的互相转化

    字符串和枚举的互相转化 字符串转枚举枚举转字符串总结 字符串转枚举 提示 xff1a 关键代码Enum Parse 代码如下 xff08 示例 xff09 xff1a string str span class token operator
  • CentOS7 安装mysql(YUM源方式)

    CentOS7 安装mysql xff08 YUM源方式 xff09 1 下载mysql源安装包 wget http dev mysql com get mysql57 community release el7 8 noarch rpm
  • Linux(5)---Linux中nano命令

    nano是一个字符终端的文本编辑器 xff0c 有点像DOS下的editor程序 它比vi vim要简单得多 xff0c 比较适合Linux初学者使用 某些Linux发行版的默认编辑器就是nano nano命令可以打开指定文件进行编辑 xf
  • Centos7安装配置桌面环境xfce

    1 centos最小化安装之后由于没有桌面环境 xff0c gnome太大 xff0c 所以找一个小的桌面环境用于一些不方便命令行的操作 2 首先是连接到网络 xff08 不详细展开了 xff09 3 安装桌面环境 yum groupins

随机推荐