pytorch网络的增删改

news2024/9/27 21:24:07

本文介绍对加载的网络的层进行增删改, 以alexnet网络为例进行介绍。

1. 加载网络

import torchvision.models as models  

alexnet =models.alexnet(weights=models.AlexNet_Weights.DEFAULT)
print(alexnet)

在这里插入图片描述

2. 删除网络

在做迁移学习的时候,我们通常是在分类网络的基础上进行修改的。一般会把网络最后的几层删除掉,主要是全局平均池化层、全连接层。只留前面的网络部分作为特征提取器,再次基础上进行其他的任务。

2.1 删除网络任意层

  • 将alexnet的classifier这一部分全删除掉

在这里插入图片描述

del  alexnet.classifer
print(alexnet)

删除classifer模块后,打印结果如下:
在这里插入图片描述
可以看到只剩下featuresavgpool这两个模块了。刚才的classifier就已经被我们删除掉了。

  • 删除classifier模块中的某一层

如果不想把classifier这一模块整体删除,只想删除classifier中比如第6个层

# del alexnet.classifier 
del alexnet.classifier[6]
print(alexnet)

在这里插入图片描述
可以看到classifier中第6层就已经被删除掉了。

2.2 删除网络的最后多层

如果想把网络的连续几层给删除掉,比如classifier中最后的几层删除掉

#------------------删除网络的最后多层--------------------------#
alexnet.classifier = alexnet.classifier[:-2]
print(alexnet)
#-------------------------------------------------------------#

打印信息如下:
在这里插入图片描述

  • 可以看出classifier看出最后2层(5,6)被删除掉了

可以使用切片的方式,保留不需要被删除的层重新赋给classifier模块,没有保留的就被删除了。

3. 修改网络的某一层

  • 没有修改之前alexnet.classifier的第6层是个全连接层,输入通道为4096, 输出通道为1000
    在这里插入图片描述
  • 假设此时,我们想最后一层全连接层的输出,改为1024。此时,你只需要重新定义这层全连接层。
#-----------------修改网络的某一层-----------------------------#
alexnet.classifier[6] = nn.Linear(in_features=4096,out_features=1024)
print(alexnet)
#-------------------------------------------------------------#

打印后,可以看到最后一层的输出由原来的4096改为了1024
在这里插入图片描述

4. 在网络中添加某一层

4.1 每次添加一层

假设我们想在网络最后输出中,再添加两层,分别为ReLUnn.Linear

#-----------------修改网络的某一层-----------------------------#
alexnet.classifier[6] = nn.Linear(in_features=4096,out_features=1024)
# print(alexnet)
#-------------------------------------------------------------#


#-------------网络添加层,每次添加一层--------------------------#
alexnet.classifier.add_module('7',nn.ReLU(inplace=True))
alexnet.classifier.add_module('8',nn.Linear(in_features=1024,out_features=20))
print(alexnet)
#-------------------------------------------------------------#
  • 利用add_module来添加层,第一个参数为层名称,第二个参数为定义layer的内容
  • 我们在alexnet.classifier这个block中进行添加的,添加后打印网络结构如下:
    在这里插入图片描述
  • 可以看到成功的添加了最后2层。

4.2 一次添加多层

如果觉得一层层的添加层比较麻烦,比如我们可以一次性添加一个大的模块new_block

block = nn.Sequential(
    nn.ReLU(inplace=True),
    nn.Linear(in_features=1024,out_features=20)
)

alexnet.add_module('new_block',block)
print(alexnet)

在这里插入图片描述

  • 可以看到在alexnet网络中新增了new_block,该block中包括2层,分别是ReLU层以及Linear层。

以上就是对Pytorch网络增删改的方法,完整的代码如下:

import torchvision.models as models  
import torch.nn   as nn 

alexnet =models.alexnet(weights=models.AlexNet_Weights.DEFAULT)
# print(alexnet)

#1.-----------------删除网络的最后一层-------------------------#
# del alexnet.classifier 
# del alexnet.classifier[6]
# print(alexnet)
#-------------------------------------------------------------#

#------------------删除网络的最后多层--------------------------#
# alexnet.classifier = alexnet.classifier[:-2]
# print(alexnet)
#-------------------------------------------------------------#

#-----------------修改网络的某一层-----------------------------#
alexnet.classifier[6] = nn.Linear(in_features=4096,out_features=1024)
# print(alexnet)
#-------------------------------------------------------------#


#-------------网络添加层,每次添加一层--------------------------#
# alexnet.classifier.add_module('7',nn.ReLU(inplace=True))
# alexnet.classifier.add_module('8',nn.Linear(in_features=1024,out_features=20))
# print(alexnet)
#-------------------------------------------------------------#

#-----------------------网络添加层,一次性添加多层--------------#
block = nn.Sequential(
    nn.ReLU(inplace=True),
    nn.Linear(in_features=1024,out_features=20)
)

alexnet.add_module('new_block',block)
print(alexnet)
#-------------------------------------------------------------#


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全狗waf

安全狗waf安装 1、先将phpstudy 以管理员身份运行,将运行模式修改为 “系统服务”,点击“应用”。 2、下载安全狗,安全狗-领先云安全服务与解决方案提供商|云原生安全|服务器安全|网站安全|态势感知 3、安装安全狗,以管理员身份运…

python调取一欧易API并写一个比特币均线交易策略

比特币均线交易策略是一种基于比特币价格的移动均线的交易策略。它通过计算不同时间段的移动均线来确定买入和卖出点。 具体步骤如下: 确定要使用的均线。常用的均线包括5日、10日、20日、50日和200日均线。较短的均线可以更快地反应价格变动,而较长的均…

探秘 AJAX:让网页变得更智能的异步技术(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

AcWing算法提高课-4.1.2搭配购买

算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 题目描述 Joe觉得云朵很美,决定去山上的商店买一些云朵。 商店里有 n n n 朵云,云朵被编号为 1 , 2 , … , n 1,2,…,n 1,2,…,n,并且每朵云都有一个价值。 但是商店…

机器学习——主成分分析(PCA)

今天由我来向大家何为PCA算法及如何实现,PCA算法是无监督方法的典型,在此之前我们先来了解有监督学习、无监督学习以及半监督学习的区别。 一、有监督学习、无监督学习、半监督学习的区别 1. 有监督学习 监督学习是从标记的训练数据来推断一个功能的机…

C语言——小细节和小知识5

一、某些预处理指令 #ifdef #else #endif 这三个预处理指令用于条件编译&#xff0c;#ifdef用于判断某个宏是否被定义过&#xff0c;#endif用于结束#ifdef的作用范围&#xff0c;例如&#xff1a; #include <stdio.h>#define MAX 10int main() { #ifdef MAXprintf(&…

基于JAVA的无代码动态表单系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 动态类型模块2.2 动态文件模块2.3 动态字段模块2.4 动态值模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 动态类型表3.2.2 动态文件表3.2.3 动态字段表3.2.4 动态值表 四、系统展示五、核心代码5.1 查询档案类型5.…

OpenHarmony鸿蒙原生应用开发,ArkTS、ArkUI学习踩坑学习笔记,持续更新中。

一、AMD处理器win10系统下&#xff0c;DevEco Studio模拟器启动失败解决办法。 结论&#xff1a;在BIOS里面将Hyper-V打开&#xff0c;DevEco Studio模拟器可以成功启动。 二、ArkTS自定义组件导出、引用实现。 如果在另外的文件中引用组件&#xff0c;需要使用export关键字导…

Educational Codeforces Round 160 (Rated for Div. 2)

Educational Codeforces Round 160 (Rated for Div. 2) Educational Codeforces Round 160 (Rated for Div. 2) A. Rating Increase 题意&#xff1a;给定一个由数字字符组成的字符串&#xff0c;且无前导零&#xff0c;将其分割成ab两部分&#xff0c;b不能有前导零&#x…

制造企业可以通过哪些措施改善设备OEE

设备综合效率OEE&#xff08;Overall Equipment Effectiveness&#xff09;是制造企业衡量设备效率的关键指标之一。高效的设备运行对于提高生产效率、降低成本和实现竞争优势至关重要。然而&#xff0c;实现高水平的设备OEE并不是一项简单的任务。本文将介绍一些制造企业可以采…

Linux I/O神器之io_uring

io_uring 是 Linux 于 2019 年加入到内核的一种新型异步 I/O 模型&#xff0c;io_uring 主要为了解决 原生AIO&#xff08;Native AIO&#xff09; 存在的一些不足之处。下面介绍一下原生 AIO 的不足之处&#xff1a; 系统调用开销大&#xff1a;提交 I/O 操作和获取 I/O 操作…

共享中药房新突破:亿发打造专业调度与强兼容性的智慧煎药平台

随着共享中药房、智能煎药中心等中医药信息化业务的蓬勃发展&#xff0c;越来越多的医疗机构开始引入自动化设备&#xff0c;将其应用到实际的生产环节中&#xff0c;以辅助或部分替代传统的人工操作。这种自动化设备需要通过智能配方煎药管理系统作为系统平台来进行对接和集成…

在统信UOS操作系统1060上如何部署DNS服务器?01

原文链接&#xff1a;在统信UOS操作系统1060上如何部署DNS服务器&#xff1f;01 hello&#xff0c;大家好啊&#xff01;今天我要给大家带来的是在统信UOS操作系统1060上部署DNS服务器系列的第一篇文章。在这个系列中&#xff0c;我们将一步步搭建一个完整的DNS服务器环境。而今…

docker小白第六天

docker小白第六天 容器数据卷是什么 首先&#xff0c;容器卷有个坑&#xff1a;容器卷需要加入privilegedtrue&#xff0c;如下图所示&#xff0c;是为了解决permission denied的问题。其中“挂载”的意思是相当于一个硬盘插到主机上。使用该命令。是扩大容器的权限解决挂载目…

FA2016AS (MHz范围晶体单元,内置热敏电阻)

FA2016AS晶振是爱普生推出的一款频率范围为38.4MHz 的石英晶体谐振器&#xff0c;内置热敏电阻&#xff0c;小体积贴片(2.0 1.6 0.65 mm&#xff09;&#xff0c;具有小型超薄、稳定性好、具备优良的耐环境特性及高耐热性强.满足无铅焊接的回流温度曲线要求的特点。该款无源晶…

MongoDB的查询分析explain和hint

本文主要介绍MongoDB的查询分析explain和hint。 目录 MongoDB的查询分析explainhint MongoDB的查询分析 在MongoDB中&#xff0c;"explain"和"hint"是两个用于查询优化和分析的关键指令。 explain 在MongoDB中&#xff0c;explain()是一个用于查询分析的…

【洛谷算法题】P1888-三角函数【入门2分支结构】Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P1888-三角函数【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式&a…

三、W5100S/W5500+RP2040之MicroPython开发<DNS示例>

文章目录 1. 前言2. 相关网络信息2.1 简介2.2 DNS工作过程2.3 优点2.4 应用 3. WIZnet以太网芯片4. DNS解析示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代&#xff0c;MicroPyt…

多目标跟踪学习

本文来源&#xff1a; 目标跟踪那些事儿-技术和课程介绍_哔哩哔哩_bilibili 为该视频的学习笔记 目的&#xff1a;我的学习目的主要是了解现有的跟踪算法&#xff0c;并着重了解卡尔曼滤波算法&#xff0c;利用卡尔曼滤波算法进行多目标跟踪等后续一系列估计算法。老师视频中提…

【C++篇】Vector容器 Vector嵌套容器

文章目录 &#x1f354;简述vector&#x1f384;vector存放内置数据类型⭐创建一个vector容器⭐向容器里面插入数据⭐通过迭代器访问容器里面的数据⭐遍历&#x1f388;第一种遍历方式&#x1f388;第二种遍历方式&#x1f388;第三种遍历方式 &#x1f384;vector存放自定义数…