(动手学习深度学习)第13章 计算机视觉---微调
文章目录
- 微调
- 总结
- 微调代码实现
微调






总结
- 微调通过使用在大数据上的恶道的预训练好的模型来初始化模型权重来完成提升精度。
- 预训练模型质量很重要
- 微调通常速度更快、精确度更高
微调代码实现
- 导入相关库
%matplotlib inline
import os
import torch
import torchvision
from torch import nn
from d2l import torch as d2l
import matplotlib as plt
- 获取数据集
d2l.DATA_HUB['hotdog'] = (d2l.DATA_URL + 'hotdog.zip','fba480ffa8aa7e0febbb511d181409f899b9baa5')data_dir = d2l.download_extract('hotdog')
train_imgs = torchvision.datasets.ImageFolder(os.path.join(data_dir,'train'))
test_imgs = torchvision.datasets.ImageFolder(os.path.join(data_dir,'test'))
print(train_imgs)
print(train_imgs[0])
train_imgs[0][0]

查看数据集中图像的形状
hotdogs = [train_imgs[i][0] for i in range(8)]
not_hotdogs= [train_imgs[-i-1][0] for i in range(8)]
d2l.show_images(hotdogs + not_hotdogs, 2 ,8, scale=1.4)

- 数据增强
# 图像增广
normalize = torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224,0.225]
)
train_augs = torchvision.transforms.Compose( # 训练集数据增强[torchvision.transforms.RandomResizedCrop(224),torchvision.transforms.RandomHorizontalFlip(),torchvision.transforms.ToTensor(),normalize]
)
test_augs = torchvision.transforms.Compose( # 验证集不做数据增强[torchvision.transforms.Resize(256),torchvision.transforms.CenterCrop(224),torchvision.transforms.ToTensor(),normalize]
)
- 定义和初始化模型
# 下载resnet18,
# 老:pretrain=True: 也下载预训练的模型参数
# 新:weights=torchvision.models.ResNet18_Weights.IMAGENET1K_V1
pretrained_net = torchvision.models.resnet18(weights=torchvision.models.ResNet18_Weights.IMAGENET1K_V1)
print(pretrained_net.fc)

- 微调模型
- (1)直接修改网络层(如最后全连接层:512—>1000,改成512—>2)
- (2)在增加一层分类层(如:512—>1000, 改成512—>1000, 1000—>2)
本次选择(1):将resnet18最后全连接层的输出,改成自己训练集的类别,并初始化最后全连接层的权重参数
finetune_net = pretrained_net
finetune_net.fc = nn.Linear(finetune_net.fc.in_features, 2)
nn.init.xavier_uniform_(finetune_net.fc.weight)

print(finetune_net)

- 训练模型
- 特征提取层(预训练层):使用较小的学习率
- 输出全连接层(微调层):使用较大的学习率
def train_fine_tuning(net, learning_rate, batch_size=128, num_epochs=10, param_group=True):train_iter = torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(os.path.join(data_dir,'train'), transform=train_augs),batch_size=batch_size,shuffle=True)test_iter = torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(os.path.join(data_dir, 'test'), transform=test_augs),batch_size=batch_size)device = d2l.try_all_gpus()loss = nn.CrossEntropyLoss(reduction='none')if param_group:params_1x = [param for name, param in net.named_parameters()if name not in ['fc.weight', 'fc.bias']]trainer = torch.optim.SGD([{'params': params_1x}, {'params': net.fc.parameters(), 'lr': learning_rate * 10}],lr=learning_rate, weight_decay=0.001)else:trainer = torch.optim.SGD(net.parameters(),lr=learning_rate,weight_decay=0.001)d2l.train_ch13(net, train_iter, test_iter, loss,trainer, num_epochs, device)
训练模型
import time# 在开头设置开始时间
start = time.perf_counter() # start = time.clock() python3.8之前可以train_fine_tuning(finetune_net, 5e-5, 128, 10)# 在程序运行结束的位置添加结束时间
end = time.perf_counter() # end = time.clock() python3.8之前可以# 再将其进行打印,即可显示出程序完成的运行耗时
print(f'运行耗时{(end-start):.4f} s')

直接训练:整个模型都使用相同的学习率,重新训练
scracth_net = torchvision.models.resnet18()
scracth_net.fc = nn.Linear(scracth_net.fc.in_features, 2)import time# 在开头设置开始时间
start = time.perf_counter() # start = time.clock() python3.8之前可以train_fine_tuning(scracth_net, 5e-4, param_group=False)# 在程序运行结束的位置添加结束时间
end = time.perf_counter() # end = time.clock() python3.8之前可以# 再将其进行打印,即可显示出程序完成的运行耗时
print(f'运行耗时{(end-start):.4f} s')

相关文章:
(动手学习深度学习)第13章 计算机视觉---微调
文章目录 微调总结 微调代码实现 微调 总结 微调通过使用在大数据上的恶道的预训练好的模型来初始化模型权重来完成提升精度。预训练模型质量很重要微调通常速度更快、精确度更高 微调代码实现 导入相关库 %matplotlib inline import os import torch import torchvision f…...
训练跳跃(青蛙跳台阶),剑指offer,力扣
目录 题目地址: 题目: 青蛙跳台阶问题 我们直接看题解吧: 相似题目,斐波那契数列: 解题方法: 难度分析: 审题目事例提示: 解题思路: 代码实现: 小鸡识补充 题…...
Linux中路由route
route 显示当前路由表信息 route add -net 192.168.10.0 netmask 255.255.255.0 dev ens160去往192.168.10.0/24网段的路由通过ens160网卡出去add 添加路由(del表示删除路由)-A 设置地址类型(默认ipv4 配置ipv6地址时:-A …...
美国国家安全实验室员工详细数据在网上泄露
一个从事出于政治动机的攻击的网络犯罪组织破坏了爱达荷国家实验室(INL)的人力资源应用程序,该组织周日在电报上发帖称,已获得该核研究实验室员工的详细信息。 黑客组织 SiegedSec 表示,它已经访问了“数十万用户、员…...
一石激起千层浪,有关奥特曼被炒的消息引发了一场热烈的讨论
在毫无征兆的情况下,OpenAI CEO山姆-奥特曼被炒了。 一石激起千层浪,有关奥特曼被炒的消息引发了一场热烈的讨论。 有人将其看成是一场「宫斗」,有人将其看成是OpenAI的董事会与创始人们的一次纠偏。 无论如何,这样一件看似并无…...
Vue 定义只读数据 readonly
readonly 让一个响应式数据变为 **深层次的只读数据**。 isReadonly 判断一个数据是不是只读数据。 应用场景:不希望数据被修改时使用。 readonly 深层次只读: <template><h1>reactive数据</h1><p>姓名:{{ info…...
[Linux] Network: IPv6 link-local 地址是否可用不自动生成
原来有一段时间在做扩充产品的VLAN个数,然后就遇到过一个问题:说这个Linux的默认配置里,会为每一个网络接口添加一个link-local的地址,就是FE80::开头的地址,在RFC-4291里有如下的定义: Link-Local unicas…...
万字解析:十大排序(直接插入排序+希尔排序+选择排序+堆排序+冒泡排序+快速排序+归并排序+计数排序+基数排序+桶排序)
文章目录 十大排序排序算法复杂度及稳定性分析一、 排序的概念1.排序:2.稳定性:3.内部排序:4.外部排序: 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四…...
基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码
基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于原子轨道搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要…...
“我,24岁,年薪20万”:选对了行业究竟多重要?
那些在职场上顺风顺水,按部就班拿到高薪的人都有什么特点? 今天的主人公Flee告诉我,是稳。 在她的故事里,我看到一个“别人家的姑娘”,是怎样在职场上稳步晋升,大学毕业仅2年,就拿到18.6K月薪&a…...
【shell脚本】全自动完成pxe无人值守批量装机脚本,匹配centos系列
本脚本采用的是搭建ftp服务器、tftp服务器、dhcp服务器来完成文件的传输 ks应答文件为最小化安装,免去图形化,可以实现一键装机~~ #!/bin/bash yum -y install tftp-server dhcp vsftpd syslinux &> /dev/null ###脚本说明:需要输入…...
利用Python进行数据分析【送书第六期:文末送书】
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
【直播课】11月26日学习PostgreSQL-PGCE认证的朋友们准备好,直播课来了
PG培训认证优势 由工信部中国开源软件联盟PostgreSQL分会(简称中国PG分会)联合权威认证机构中国电子工业标准化技术协会,是目前国内唯一权威的PG技术等级认证,填补了国内PG技术领域的空白。 PG培训认证等级 PG初级-PGCA PG应用管…...
ModernCSS.dev - 来自微软前端工程师的 CSS 高级教程,讲解如何用新的 CSS 语法来解决旧的问题
今天给大家安利一套现代 CSS 的教程,以前写网页的问题,现在都可以用新的写法来解决了。 ModernCSS.dev 是一个现代 CSS 语法的教程,讲解新的 CSS 语法如何解决一些传统问题,一共有30多课。 这套教程的作者是 Stephanie Eckles&am…...
dvwa-command injection 代码审计(超详细逐行审计)
dvwa-command injection 代码审计 low <?phpif( isset( $_POST[ Submit ] ) ) {// Get input$target $_REQUEST[ ip ];// Determine OS and execute the ping command.if( stristr( php_uname( s ), Windows NT ) ) {// Windows$cmd shell_exec( ping . $target );}…...
hadoop 配置历史服务器 开启历史服务器查看 hadoop (十)
1. 配置了三台服务器,hadoop22, hadoop23, hadoop24 2. hadoop文件路径: /opt/module/hadoop-3.3.4 3. hadoop22机器配置历史服务器的配置文件: 文件路径:/opt/module/hadoop-3.3.4/etc/hadoop 文件名称:mapred-size.xml 新增历…...
Java注解(Annotation)的基本知识
Java注解(Annotation)的基本知识 此文的目的只在于了解的注解的基本知识,知道注解的一些概念,使能够看懂注解的使用。 注解概述 Java 注解(Annotation)又称 Java 标注,使 JDK5.0 引入的一种注释机制。Java 语言中的…...
ssh远程连接不了虚拟机ubuntu
直奔主题 1. 确保linux安装了ssh2.查看网络适配器是否启用3.连接成功 1. 确保linux安装了ssh sudo apt-get install openssh-server2.查看网络适配器是否启用 3.连接成功...
文心一言 VS 讯飞星火 VS chatgpt (140)-- 算法导论11.4 5题
五、用go语言,考虑一个装载因子为a的开放寻址散列表。找出一个非零的a值,使得一次不成功查找的探查期望数是一次成功查找的探查期望数的 2 倍。这两个探查期望数可以使用定理11.6 和定理 11.8 中给定的上界。 文心一言,代码正常运行…...
代码随想录Day51 完结篇 LeetCode T84 柱状图的最大矩形
前言 今天代码随想录一刷也告一段落了,没想到我居然坚持下来了,一节都没有落下,学习到了很多种不同的解题思路,也和大家一块交流了很多,哈哈也许不久以后我还得再次二刷代码随想录,希望这一系列的题解能给大家带来帮助,如想要系统学习,请参照代码随想录网站的题解以及b站的配套…...
Android开发中的蓝牙与WiFi技术深度解析
随着移动互联网的飞速发展,Android平台在智能设备连接中扮演着核心角色。蓝牙和WiFi作为无线通信的两大支柱技术,被广泛应用于物联网、智能家居、健康监测等领域。本文将以Android开发工程师的视角,深度剖析蓝牙和WiFi的核心实现、优化策略及常见问题。文章基于标准职位要求…...
暗黑破坏神2存档编辑器:快速掌握免费角色与物品管理终极指南
暗黑破坏神2存档编辑器:快速掌握免费角色与物品管理终极指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款功能强大的暗黑破坏神2游戏存档编辑工具,专为《暗黑破坏神2》经典版和重制版…...
Learnship:开源Agent Harness解决AI编程上下文丢失,实现工程化协作
1. 项目概述:什么是 Learnship?如果你用过 Claude Code、Cursor 或者 Windsurf 这类 AI 编程助手超过几次,大概率会遇到一个让人抓狂的“失忆症”问题:每次开启新对话,AI 就像第一次见面一样,完全不记得你项…...
别再让TL431输出锯齿波了!实测分析接不同电容的振荡现象与根治方案
TL431输出振荡难题:从锯齿波现象到工程根治方案 引言:被低估的基准源稳定性挑战 在电源设计和精密电压基准电路中,TL431堪称工程师的"瑞士军刀"。这款经典器件以2.5V精密基准为核心,衍生出从稳压、比较到恒流等多种应用…...
26山大软院创新实训--MarketClaw(四)
本周将迎来项目的中期检查,我选择做一下内容比较简单的ppt自动生成skill,作为我的第四篇博客。一、开发初衷当完成小红书图文生成以及自动化发布后,我们准备的产品就展示给公众了。当有客户希望与我们交流合作时,PPT是必不可少的&…...
如何用OpenDrop开源数字微流控平台掌控微观世界:3步搭建你的生物实验室
如何用OpenDrop开源数字微流控平台掌控微观世界:3步搭建你的生物实验室 【免费下载链接】OpenDrop Open Source Digital Microfluidics Bio Lab 项目地址: https://gitcode.com/gh_mirrors/ope/OpenDrop 想象一下,你能像操控棋盘上的棋子一样精确…...
ESP32S3新手避坑:用IDF5.0驱动GT911触摸屏,我踩过的三个雷都给你填平了
ESP32S3实战:GT911触摸屏驱动开发中的三大陷阱与深度解决方案 第一次把GT911触摸屏接到ESP32S3开发板上时,我以为这不过是个简单的I2C设备驱动问题——毕竟网上能找到不少现成的代码。但真正开始调试后才发现,从芯片版本差异到寄存器操作时序…...
如何通过模块化AI工具实现图像处理优化:ComfyUI-Impact-Pack V8性能提升方案解析
如何通过模块化AI工具实现图像处理优化:ComfyUI-Impact-Pack V8性能提升方案解析 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and m…...
通达信缠论可视化插件终极指南:3步实现专业级技术分析
通达信缠论可视化插件终极指南:3步实现专业级技术分析 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 你是否曾经为缠论的复杂结构而头疼?面对K线图中的顶底分型、笔、线段和中枢…...
高通8155平台XBL启动流程保姆级拆解:从PBL到UEFI Shell的完整代码追踪
高通8155平台XBL启动流程深度解析:从PBL到UEFI的完整执行路径 1. 平台启动架构概览 高通8155作为智能座舱领域的旗舰SoC,其启动流程体现了现代嵌入式系统的典型设计哲学。整个启动链由多级引导加载程序构成,每级loader各司其职,最…...
