从代码学习深度学习 - 微调 PyTorch 版
文章目录
- 前言
- 一、迁移学习与微调概念
- 二、微调步骤解析
- 三、实战案例:热狗识别
- 3.1 数据集准备
- 3.2 图像增强处理
- 3.3 加载预训练模型
- 3.4 模型重构
- 3.5 差异化学习率训练
- 3.6 对比实验分析
- 总结
前言
深度学习模型训练通常需要大量数据,但在实际应用中,我们往往难以获得足够的标记数据。例如,如果我们想构建一个识别不同类型椅子的系统,收集和标记数千甚至数万张椅子图像将耗费大量时间和资金。这种情况下,迁移学习特别是微调(fine-tuning)技术便显示出其强大优势。本文将通过一个热狗识别的实际案例,详细讲解如何在PyTorch中实现微调,帮助读者掌握这一重要技术。注意,本博客只列出了与微调相关的代码,完整代码在下方链接中给出,其中包含了详细的注释。
完整代码:下载链接
一、迁移学习与微调概念
迁移学习是指将从一个任务中学到的知识应用到另一个相关任务中。在计算机视觉领域,我们常常利用在大规模数据集(如ImageNet)上预训练的模型,将其"迁移"到我们的特定任务中。
微调是迁移学习的一种常见方法,它不仅复用预训练模型的架构,还复用其参数,然后通过在目标数据集上继续训练来调整这些参数,使模型适应新任务。这种方法的核心假设是:预训练模型已经学到了通用的特征提取能力,只需要针对新任务做适度调整。
二、微调步骤解析
微调通常包含以下四个关键步骤:
- 预训练模型选择:在源数据集(如ImageNet)上训练一个基础模型
- 模型结构调整:复制预训练模型的架构和参数(除输出层外)
- 输出层替换:添加适合目标任务的新输出层,并随机初始化其参数
- 差异化训练:在目标数据集上训练模型,通常对预训练层使用较小学习率,对新添加层使用较大学习率
三、实战案例:热狗识别
3.1 数据集准备
首先,我们加载并查看热狗识别的数据集:
# 设置matplotlib在Jupyter Notebook中内嵌显示图表
%matplotlib inline
# 导入必要的库
import os # 用于处理文件路径
import torch # PyTorch深度学习框架
import torchvision # PyTorch视觉库,用于处理图像数据
from torch import nn # PyTorch神经网络模块
# 导入自定义工具函数,用于显示图像
import utils_for_huitu
# 设置数据目录路径
data_dir = 'hotdog' # 数据根目录
# 加载训练集图像
# ImageFolder假设数据按类别存放在不同文件夹中
# 文件结构应为:hotdog/train/[类别1]/, hotdog/train/[类别2]/ 等
train_imgs = torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train'))
# 加载测试集图像
test_imgs = torchvision.datasets.ImageFolder(os.path.join(data_dir, 'test'))
# 获取训练集中的热狗图像样本
# 从训练集的前8张图像中获取图像数据
# train_imgs[i][0]表示第i个样本的图像数据,train_imgs[i][1]是对应的标签
hotdogs = [train_imgs[i][0] for i in range(8)]
# 获取训练集中的非热狗图像样本
# 从训练集的末尾8张图像中获取图像数据
not_hotdogs = [train_imgs[-i - 1][0] for i in range(8)]
# 显示图像
# 将热狗和非热狗图像合并为一个列表,并显示在2行8列的网格中
# scale参数用于调整图像显示的大小
utils_for_huitu.show_images(hotdogs + not_hotdogs, 2, 8, scale=1.4)
相关文章:
从代码学习深度学习 - 微调 PyTorch 版
文章目录 前言一、迁移学习与微调概念二、微调步骤解析三、实战案例:热狗识别3.1 数据集准备3.2 图像增强处理3.3 加载预训练模型3.4 模型重构3.5 差异化学习率训练3.6 对比实验分析总结前言 深度学习模型训练通常需要大量数据,但在实际应用中,我们往往难以获得足够的标记数…...
Registry镜像仓库的安装与使用
任务目标 (1)了解目前主流的镜像仓库 (2)掌握registry私有镜像仓库的部署与使用 任务实施 基础信息 Docker私有仓库个宿主机配置信息 主机名 IP地址 节点角色 registry 192.168.110.80 私有仓库 node1 192.168.110.9…...
java多线程(6.0)
目录 编辑 阻塞队列 阻塞队列概念 生产者消费者模型 阻塞队列的作用 阻塞队列的使用 阻塞队列的实现 阻塞队列 阻塞队列概念 阻塞队列是一种特殊的队列,同样遵循“先进先出”的原则,支持入队操作和出队操作和一些基础方法。在此基础上&#…...
tkinter的文件对话框:filedialog
诸神缄默不语-个人技术博文与视频目录 文章目录 一、前言二、tkinter.filedialog模块详解2.1 模块导入方式2.2 通用参数说明 三、五大核心函数实战3.1 选择单个文件 - askopenfilename()3.2 多文件选择 - askopenfilenames()3.3 保存文件对话框 - asksaveasfilename()3.4 选择目…...
HOW - 如何模拟实现 gpt 展示答案的交互效果
文章目录 产品设计维度核心目标实现方式主要靠一些技巧1. 用 emoji 做语义锚点2. 每个段落只传达一件事3. 有节奏地对话式切换4. 使用 Markdown 风格来排版5. 用“你”而不是“用户”说话 如果想实现类似体验(比如写文档、教程、产品介绍) 前端开发维度想…...
达梦数据库压力测试报错超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZE解决
1.名词解释:达梦数据库中的HJ_BUF_GLOBAL_SIZE是所有哈希连接操作可用的最大哈希缓冲区大小,单位为兆字节(MB) 2.达梦压测报错: 3.找到达梦数据库安装文件 4.压力测试脚本 import http.client import multiprocessi…...
第11章 面向分类任务的表示模型微调
第1章 对大型语言模型的介绍第2章 分词和嵌入第3章 解析大型语言模型的内部机制第4章 文本分类第5章 文本聚类与主题建模第6章 提示工程第7章 高级文本生成技术与工具第8章 语义搜索与检索增强生成第9章 多模态大语言模型第10章 构建文本嵌入模型第12章 微调生成模…...
c#加密证件号的中间部分,改为*号
前言 使用场景:在我项目中,我需要给前端提供接口,所以我要吧证件号进行加密。例如:411421199510225612,这是一个身份证号,18为的,那么我加密完成之后就会是 411421********5612,类似…...
qt中写一个简易的计算器
以下是添加了详细代码注释的版本: cpp #include <iostream>using namespace std;定义加法函数(已注释掉) //int add(int a, int b) { // return a b; //}定义减法函数(已注释掉) //int min(int a, int b) {…...
[特殊字符] Docker 从入门到实战:全流程教程 + 项目部署指南(含镜像加速)
Docker 是现代 DevOps 的基石,应用广泛于微服务、CI/CD、K8s、云原生等场景。本文将从 0 到 1 手把手带你掌握 Docker 的核心知识点,并完成 Java Nginx 项目部署,适合新手与进阶开发者阅读与实战。 📚 目录 Docker 快速入门 入门…...
《R语言SCI期刊论文绘图专题计划》大纲
今天开始,我将和大家分享系统且详细的《R语言SCI期刊绘图专题教程》,内容会从基础到高阶应用,从配色美学到顶刊风格复现,确保大家可以学到高质量内容!下面是大纲。 📚《R语言SCI期刊论文绘图专题计划》 第…...
从氛围到节奏:情绪化配乐网站指南
在影视、短视频、广告甚至游戏开发中,配乐的作用早已超越了简单的背景音效,它能够深刻地影响观众的情绪,为作品注入灵魂。但如何找到那些能够精准传达情绪、完美契合画面的配乐呢?今天,就让我们一起探索那些能够助力你…...
矩阵运营:抢占市场与流量的利器
还在为无法超越行业老大而苦恼?还在为市场份额难以扩大而焦虑?还在为流量匮乏、客资不足而发愁?别担心,矩阵运营就是你突破困局的关键! 一、矩阵运营:颠覆传统的运营模式 在当今竞争激烈的商业环境中&…...
【2025最新面试操作系统八股】CPU利用率和load(负载)的区别,CPU利用率怎么算。
总结 负载(Load)和 CPU 利用率是衡量系统性能的两个不同的指标,它们从不同的角度反映了系统的状态。 CPU 利用率表示 CPU 正在执行指令的时间比例,即 CPU 忙碌的程度。它是一个百分比值,表示在某个时间间隔内&#x…...
ApplicationRunner的run方法与@PostConstruct注解
ApplicationRunner 的 run 方法与 PostConstruct 注解在 Spring Boot 中均用于初始化逻辑,但二者的 执行时机、作用范围 和 功能特性 存在显著差异。以下是详细对比分析: 一、核心差异对比 维度PostConstructApplicationRunner.run()触发时机Bean 实例化…...
【leetcode刷题日记】lc.73-矩阵置零
目录 1.题目 2.代码 1.题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]…...
配置 RDP 远程桌面协议连接ubuntu服务器桌面
文章目录 一、简介二、服务安装三、桌面安装小结 一、简介 RDP(Remote Desktop Protocol,远程桌面协议)是微软开发的一种专有协议,用于在网络上实现远程桌面访问,允许用户通过客户端设备(如 Windows、Linu…...
统计文件中单词出现的次数并累计
# 统计单词出现次数 fileopen("E:\Dasktape/python_test.txt","r",encoding"UTF-8") f1file.read() # 读取文件 countf1.count("is") # 统计文件中is 单词出现的次数 print(f"此文件中单词is出现了{count}次")# 2.判断单词出…...
【初识Trae】字节跳动推出的下一代AI原生IDE,重新定义智能编程
初识官网文档 从官网可以看到有两个大标签页,即Trae IDE CN和Trae插件,这就说明Trae在发布Trae IDE的同时考虑到对主流IDE的插件支持,这一点非常有心,但是我估测Trae IDE的体验更好(就是AI IDE出生,毕…...
Spark读取Apollo配置
--conf spark.driver.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 --conf spark.executor.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 在spark的提交命令中&…...
前端技术Ajax实战
1.1 案例_图书管理-介绍 目标 掌握图书管理案例的增删改查业务和 Bootstrap 弹框的使用。 讲解 1. 运行图书管理案例效果 展示增删改查业务效果,并使用 Bootstrap 弹框承载表单。 2. 分析步骤 学习 Bootstrap 弹框(用于添加和编辑图书)…...
ctfshow web入门 命令执行(29-77)
Web 命令执行是指攻击者借助Web应用程序里的漏洞,在服务器端执行任意系统命令的一种攻击手段。 原理: Web 应用程序在处理用户输入时,有时会调用系统命令。若开发人员没有对用户输入进行严格的过滤与验证,攻击者就能够通过构造恶意…...
Mac「brew」快速安装Redis
安装Redis 步骤 1:安装 Redis 打开终端(Terminal)。 运行以下命令安装 Redis: brew install redis步骤 2:启动 Redis 安装完成后,可以使用以下命令启动 Redis 服务: brew services start redis…...
非对称电容减重实验
加载高压的非对称电容在变压器油中的减重实验 早年国外流传飘升机(Lifter)的视频。爱好者们用简单的材料制作了非对称电容,通高压直流电,它就能飘起来。 所谓的飘升机,就是一种非对称电容。它由面积相差极大的两个极板…...
day37图像处理OpenCV
文章目录 一、图像预处理19 霍夫变换19.1 理解霍夫变换19.2 (标准)霍夫直线变换19.3 统计概率霍夫直线变换19.4 霍夫圆变换 一、图像预处理 19 霍夫变换 19.1 理解霍夫变换 霍夫变换是图像处理的一种技术,主要用于检测图像中的直线、圆等几何形状。基本思想就是将…...
23种设计模式-行为型模式之责任链模式(Java版本)
Java 责任链模式(Chain of Responsibility Pattern)详解 🧠 什么是责任链模式? 责任链模式是一种行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。将这些对象…...
机器学习的基本概念
机器学习是人工智能的一个重要研究领域。与计算机科学、心理学等多种学科都有密切的关系,牵涉的面比较宽,而且许多理论及技术上的问题尚处于研究之中,接下来对它的一些基本概念和方法作一简要讨论,以便对它有一个初步的认识。 一…...
【6】GD32 高级通信外设 CAN、USBD
高级通信外设:CAN、USBD CAN CAN简介、主要功能与相关API回环模式收发发送特定ID的数据帧实验CAN数据帧的接收实验使用过滤器接收特定的数据帧 USBD USB通信简介USBD设备固件库架构、分层文件与库函数说明USBD模拟键盘应用USBD虚拟串口应用USBD模拟U盘应用...
手工收集统计信息
有时想对某些表收集统计信息 CREATE OR REPLACE PROCEDURE GATHER_STATS ASDECLAREV_SQL1 VARCHAR(1000);--表游标CURSOR C1 ISSELECT (SELECT USER) AS TABLE_OWNER,TABLE_NAMEFROM USER_TABLES; --可以在这里加过滤条件--索引游标CURSOR C2 ISSELECT TABLE_OWNER,INDEX_NAM…...
隧道调频广播覆盖的实现路径:隧道无线广播技术赋能行车安全升级,隧道汽车广播收音系统助力隧道安全管理升级
隧道调频广播覆盖的实现路径:隧道无线广播技术赋能行车安全升级,隧道汽车广播收音系统助力隧道安全管理升级 北京海特伟业科技有限公司任洪卓发布于2025年4月23日 在现代交通基础设施建设中,隧道作为公路、铁路等交通网络的重要组成部分,其内部通信系统…...
深度强化学习(DRL)实战:从AlphaGo到自动驾驶
——从算法原理到产业落地的全链路解析 摘要 本文通过算法对比矩阵、训练流程图解、Python代码实战及产业应用解析,构建从理论创新到工程落地的完整技术栈。实验数据显示:采用PPO算法训练的7自由度机械臂抓取成功率达92%,基于改进型DQN的自…...
【数据可视化-33】病毒式社交媒体潮流与用户参与度可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
ubuntu使用dify源码安装部署教程+避坑指南
很多人,包括我在最初使用dify的时候都习惯使用docker来部署安装环境,但在二次开发使用过程中,我们可能希望使用源码来安装,那么这篇文章我将给大家分享如何在ubuntu系统下使用源码安装,并提供大家遇到的疑难杂症如下: dify安装使用过程中报错:/console/api/workspaces/…...
软件技术专业
软件技术专业是一个专注于软件开发、测试、维护及相关技术的学科专业。以下是其相关介绍: 专业概述 软件技术专业主要培养具备扎实的软件理论基础和较强的实践能力,能熟练掌握软件开发工具和技术,从事软件设计、开发、测试、维护等工作的高素…...
AI数据分析的利器:解锁BI工具的无限潜力
在数字化浪潮席卷全球的今天,数据已成为企业最宝贵的资产之一。如何高效、准确地分析这些数据,挖掘其中的价值,成为企业决策的关键。AI数据分析,作为新时代的数据分析利器,正逐渐改变着企业的决策方式。而BI࿰…...
docker 代理配置冲突问题
问题描述 执行 systemctl show --property=Environment docker 命令看到有如下代理配置 sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:65001 HTTPS_PROXY=http://127.0.0.1:65001 NO_PROXY=127.0.0.1,docker.io,ghcr.io,uhub…...
清理HiNas(海纳斯) Docker日志并限制日志大小
我在一个机顶盒的HiNas系统上跑Octoprint的docker版本,每隔一段时间盒子空间就被占完了,运行df -h之后,显示/dev/root Use 100%。 Filesystem Size Used Avail Use% Mounted on /dev/root 6.6G 6.6G 0 100% / devtmpfs …...
kafka整合flume与DStream转换
一、Kafka整合flume cd /opt/software/flume/conf/ vi flume-kafka.conf a1.sourcesr1 a1.sinksk1 a1.channelsc1 a1.sources.r1.typespooldirt a1.sources.r1.spoolDir/root/flume-kafka a1.sinks.k1.typeorg.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.kafka.to…...
第2讲:R语言中的色彩美学——科研图表配色指南
目录 一、背景导引:科研图表为何需要“配色讲究”? 二、色彩基础认知:别让“红绿盲”错过你的科研成果 三、R语言中的配色库全景图 四、案例演示与代码实战 🎨案例1:ggplot2 + viridis 配色的热图 🎨案例2:MetBrewer 中的印象派色彩 五、技巧点拨:如何为SCI图…...
C++入门小馆: 深入了解STLlist
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
Float32、Float16、BFloat16
我们先介绍 Float32、Float16、BFloat16 的 浮点数表示方法 然后根据浮点数表示,来分析总结他们是怎么控制 精度和 数值范围 的 最后再来对比的说明 Float32、Float16、BFloat16 的 应用场景 和 硬件支持 1、浮点数的表示方法 Float32 : 单精度浮点数…...
多模态深度学习: 从基础到实践
多模态深度学习: 从基础到实践 多模态学习是人工智能领域的前沿方向,它允许模型同时处理和理解多种数据类型。本文将介绍多模态学习的核心概念,以及如何在实际项目中应用这些技术。 什么是多模态学习? 多模态学习涉及处理和整合来自不同来…...
Java学习手册:时间戳、时区等相关概念
一、时间戳 定义 :时间戳是指以秒或毫秒为单位,表示自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来的 elapsed time。它是衡量时间的一种方式,常用于系统开发中记录事件的发生顺序和具体时间。作用 :…...
Axure全局变量的含义与基础应用
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:全局变量 主要内容:全局变量含义、基础应用 应用场景:元件赋值 案例展示: 案例视频:...
Java 24 深度解析:云原生时代的性能更新与安全重构
一、Java 24 核心特性全景图 Java 24 于 2025 年 3 月正式发布,带来 24 项核心改进,覆盖性能优化、安全性增强、语言升级和云原生支持四大领域。以下是关键特性的全景式解析: 1. 性能优化:从内存到并发的全方位突破 紧凑对象头&…...
ubuntu(28):ubuntu系统多版本conda和多版本cuda共存
0. cuda(包括cudnn)、conda安装照常 注意: (1)多个conda不要安装到一个目录了,可以见下面的示例目录; (2)cuda(包括cudnn)不用纠结是否添加超链接 1. 需要修改环境配置…...
28、.NET 中元数据是什么?
在.NET中,元数据(Metadata)是描述程序结构和类型信息的二进制数据集合,它是.NET运行时(CLR)的核心基础组件之一,用于支持程序加载、类型解析、反射、安全校验等关键功能。以下是其核心特性和作用…...
插入html文件,让数据可视化彰显高端大气-Excel易用宝
我们老板整了个html文件的图表,说是html文件图表兼容性更好,现在让我将这个html文件的图表插入到Excel中。 其实这事也简单哈,通过插入web控件,就可以将HTML文件插入到工作表中。 单击【易用宝plus】→【插入Web控件】。 单击【…...
基于HTML+CSS实现的动态导航引导页技术解析
基于HTMLCSS实现的动态导航引导页技术解析 效果展示 核心技术实现 1. 视差背景层 #sence {position: fixed;width: 100vw;height: 100vh;z-index: -1; }#background {width: 140%;height: 140%;position: absolute;background-size: cover;filter: brightness(0.6);animatio…...
【编译原理】 第四章 自上而下语法分析
目录 语法分析器的功能 不确定的自上而下分析 确定的自上而下分析 LL(1)文法 左递归的消除 间接左递归的消除 消除文法中全部左递归的算法 消除回溯、提左因子 FIRST集 FOLLOW集 预测分析法 递归下降分析法 语法分析器的功能 按照文法从源程序单词串(符…...