计算预卷积特征
当冻结卷积层和训练模型时,全连接层或dense层(vgg.classifier)的输入始终是相同的。为了更好地理解,让我们将卷积块(在示例中为vgg.features块)视为具有了已学习好的权重且在训练期间不会更改的函数。因此,计算卷积特征并保存下来将有助于我们提高训练速度。训练模型的时间减少了,因为我们只计算一次这些特征而不是每轮都计算。让我们在结合图5.21理解并实现同样的功能。

第一个框描述了一般情况下如何进行训练,这可能很慢,因为尽管值不会改变,但仍为每轮计算卷积特征。在底部的框中,一次性计算卷积特征并仅训练线性层。为了计算预卷积特征,我们将所有训练数据传给卷积块并保存它们。为了实现这一点,需要选择 VGG 模型的卷积块。幸运的是,VGG16的PyTorch实现包含了两个序列模型,所以只选择第一个序列模型的特征就可以了。以下代码执行此操作:
vgg = models.vggl6(pretrained=True)
vgg = vgg.cuda()
features = vgg.features
train_data_loader = torch.utils.data.Dataloader(train,batch_size=32,num_workers=3,shuffle=False)
valid_data_loader=
torch.utils,data.Dataloader(valid,batch_size=32,num_workers=3,shuffle=False)
def preconvfeat(dataset,model):conv_features = []labels_list = []for data in dataset:inputs,labels = dataif is_cuda:inputs,labels = inputs.cuda(),labels.cuda()inputs,labels = Variable(inputs),Variable(labels)output = model(inputs)conv_features.extend(output.data.cpu().numpy())labels_list.extend(labels.data.cpu().numpy())conv_features = np.concatenate([[feat] for feat in conv_features])return (conv_features,labels_list)
conv_feat_train,labels_train = preconvfeat(train_data_loader, features)
conv_feat_val,labels_val = preconvfeat (valid_data_loader, features)
在上面的代码中,preconvfeat 方法接受数据集和 vgg 模型,并返回卷积特征以及与之关联的标签。代码的其余部分类似于在其他示例中用于创建数据加载器和数据集的代码。
获得了 train 和 validation 集的卷积特征后,让我们创建 PyTorch 的 Dataset 和 DataLoader 类,这将简化训练过程。以下代码为卷积特征创建了 Dataset 和 DataLoader 类:
class My dataset(Dataset):def _init_(self,feat,labels):self.conv_feat = featself.labels = labelsdef _len_(self):return len(self.conv_feat)def _getitem_(self,idx):return self.conv_feat[idx],self.labels[idx]train_feat_dataset = My_dataset(conv_feat_train,labels_train)
val_feat_dataset = My_dataset(conv_feat_val,labels_val)
train_feat_loader =
DataLoader(train_feat_dataset,batch_size=64,shuffle=True)
val_feat_loader =
DataLoader(val_feat_dataset,batch_size=64,shuffle=True)
由于有新的数据加载器可以生成批量的卷积特征以及标签,因此可以使用与另一个例子相同的训练函数。现在将使用 vgg.classifier 作为创建 optimizer 和 fit 方法的模型。下面的代码训练分类器模块来识别狗和猫。在Titan X GPU上,每轮训练只需不到5秒钟,在其他CPU上可能需要几分钟:
train_losses, train_accuracy = [],[]
val_losses, val_accuracy = [],[]
for epoch in range(1,20):epoch_loss, epoch_accuracy =fit_numpy(epoch,vgg.classifier,train_feat_loader,phase='training')val_epoch_loss,val_epoch_accuracy = fit_numpy(epoch,vgg.classifier,val_feat_loader,phase='validation')train_losses.append(epoch_loss)train_accuracy.append(epoch_accuracy)val_losses.append(val_epoch_loss)val_accuracy.append(val_epoch_accuracy)
相关文章:
计算预卷积特征
当冻结卷积层和训练模型时,全连接层或dense层(vgg.classifier)的输入始终是相同的。为了更好地理解,让我们将卷积块(在示例中为vgg.features块)视为具有了已学习好的权重且在训练期间不会更改的函数。因此,计算卷积特征并保存下来将有助于我们…...
Python 入门 —— 描述器
Python 入门 —— 描述器 文章目录 Python 入门 —— 描述器描述器简单示例定制名称只读属性状态交互验证器类自定义验证器验证器的使用 对象关系映射 描述器 前面我们介绍了两种属性拦截的方式:特性(property)以及重载属性访问运算符&#…...
测试驱动开发TDD
如何在后端测试代码,测试一个其前端的请求,能否正常处理 以登录请求为例 package com.example.demo.login;import com.example.demo.login.pojo.User; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import…...
[论文笔记]Mixture-of-Agents Enhances Large Language Model Capabilities
引言 今天带来一篇多智能体的论文笔记,Mixture-of-Agents Enhances Large Language Model Capabilities。 随着LLMs数量的增加,如何利用多个LLMs的集体专业知识是一个令人兴奋的开放方向。为了实现这个目标,作者提出了一种新的方法…...
Redis 7.x 系列【6】数据类型之字符串(String)
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 常用命令2.1 SET2.2 GET2.3 MSET2.4 MGET2.5 GETSET2.6 STRLEN2.7 SETEX2.8…...
指针(一)
指针基础 在C中,指针是至关重要的组成部分。它是C语言最强大的功能之一,也是最棘手的功能之一。 指针具有强大的能力,其本质是协助程序员完成内存的直接操纵。 指针:特定类型数据在内存中的存储地址,即内存地址。 …...
harmony鸿蒙下实现bc交互的方式和方法
前言 最近在研究harmony操作系统下的交互,因此写一篇文章记录一下。 解决的问题 本篇文章主要是来写解决如果兼容android或者ios的交互,这样子避免h5页面的二次开发,节省资源。 交互的种类 交互对于harmony来说其实只有一种,…...
【MySQL进阶之路 | 高级篇】索引的声明与使用
1. 索引的分类 MySQL的索引包括普通索引,唯一性索引,全文索引,单列索引和空间索引. 从功能逻辑上说,索引主要分为普通索引,唯一索引,主键索引和全文索引.按物理实现方式,索引可以分为聚簇索引…...
探索Java中的设计模式:从单例到工厂模式
探索Java中的设计模式:从单例到工厂模式 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中的设计模式,从经典的单…...
表单(forms)
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在app1文件夹下创建一个forms.py文件,添加如下类代码: from django import forms class PersonForm(forms.Form): first_na…...
Geoserver源码解读四 REST服务
文章目录 文章目录 一、概要 二、前置知识点-FreeMarker 三、前置知识点-AbstractHttpMessageConverter 3.1 描述 3.2 应用 四、前置知识点-AbstractDecorator 4.1描述 4.2 应用 五、工作空间查询解读 5.1 模板解读 5.2 请求转换器解读 一、概要 关于geoserver的r…...
硬件开发笔记(二十一):外部搜索不到的元器件封装可尝试使用AD21软件的“ManufacturerPart Search”功能
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139869584 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
【AI大模型】GPTS 与 Assistants API
前言 2023 年 11 月 6 日,OpenAI DevDay 发表了一系列新能力,其中包括:GPT Store 和 Assistants API。 GPTs 和 Assistants API 本质是降低开发门槛 可操控性和易用性之间的权衡与折中: 更多技术路线选择:原生 API、…...
攻击者开始使用 XLL 文件进行攻击
近期,研究人员发现使用恶意 Microsoft Excel 加载项(XLL)文件发起攻击的行动有所增加,这项技术的 MITRE ATT&CK 技术项编号为 T1137.006。 这些加载项都是为了使用户能够利用高性能函数,为 Excel 工作表提供 API …...
Why RAG is slower than LLM?
I used RAG with LLAMA3 for AI bot. I find RAG with chromadb is much slower than call LLM itself. Following the test result, with just one simple web page about 1000 words, it takes more than 2 seconds for retrieving: 我使用RAG(可能是指某种特定的…...
Word页码设置,封面无页码,目录摘要阿拉伯数字I,II,III页码,正文开始123为页码
一、背景 使用Word写项目书或论文时,需要正确插入页码,比如封面无页码,目录摘要阿拉伯数字I,II,III为页码,正文开始以123为页码,下面介绍具体实施方法。 所用Word版本:2021 二、W…...
汽车汽配图纸管理、产品研发管理解决方案
汽车汽配图纸管理、产品研发管理解决方案 随着全球汽车市场的快速发展,中国汽车汽配行业迎来了前所未有的发展机遇。然而,在这一过程中,企业也面临着诸多挑战,如研发能力的提升、技术资料管理的复杂性、以及跨部门协作的困难等。为…...
小程序简单版音乐播放器
小程序简单版音乐播放器 结构 先来看看页面结构 <!-- wxml --><!-- 标签页标题 --> <view class"tab"><view class"tab-item {{tab0?active:}}" bindtap"changeItem" data-item"0">音乐推荐</view><…...
驾校预约管理系统
摘 要 随着驾驶技术的普及和交通安全意识的增强,越来越多的人选择参加驾校培训,以获取驾驶执照。然而,驾校管理面临着日益增长的学员数量和繁琐的预约管理工作。为了提高驾校的管理效率和服务质量,驾校预约管理系统成为了必不可少…...
C++ 左值右值 || std::move() || 浅拷贝,深拷贝 || 数据类型
数据类型: 作用:决定变量所占内存空间的字节大小,和布局方式基本数据类型: 算数类型: 整形(bool / char……扩展集 / int / long……)&& 浮点形(float/double……ÿ…...
如何通过Xiaomusic开源项目解锁小爱音箱的完整音乐播放功能
如何通过Xiaomusic开源项目解锁小爱音箱的完整音乐播放功能 【免费下载链接】xiaomusic 使用小爱音箱播放音乐,音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic Xiaomusic是一款开源智能音乐播放器,专为小米…...
基于LLM的智能网页自动化:从意图理解到工程实践
1. 项目概述:当AI学会“看”和“点”,自动化进入新阶段如果你还在为那些需要手动点击、填写表单、抓取数据的重复性网页任务感到头疼,那么browser-use这个项目可能会让你眼前一亮。简单来说,它不是一个普通的浏览器自动化工具&…...
别再手动算矩阵了!CloudCompare 2025版点云变换保姆级教程(齐次/欧拉/轴角一键搞定)
别再手动算矩阵了!CloudCompare 2025版点云变换保姆级教程(齐次/欧拉/轴角一键搞定) 点云数据处理中,最让人头疼的莫过于各种空间变换操作。传统方法需要手动计算变换矩阵,不仅容易出错,还耗费大量时间。Cl…...
高效跨平台网盘直链解析工具:5步配置实战指南
高效跨平台网盘直链解析工具:5步配置实战指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...
Unity3D LineRenderer 从入门到精通:手把手教你绘制炫酷动态轨迹(附完整C#脚本)
Unity3D LineRenderer 动态轨迹绘制实战指南 在游戏开发中,动态轨迹效果是提升视觉体验的重要元素之一。无论是魔法技能的飞行路径、赛车游戏的轮胎痕迹,还是数据可视化中的动态连线,流畅且富有表现力的线条渲染都能显著增强场景的沉浸感。Un…...
数字孪生交互推演方法
数字孪生交互推演方法(Digital Twin Interactive Deduction Methodology)是用户为中心交互系统工程(UCI-SE)在研发设计、变型设计以及生产预测环节的最高技术形态 。它改变了传统数字孪生“只能看、不能动”的静态看板僵局&#x…...
Java String.split() 方法陷阱:为什么你应该始终使用 split(regex, -1)
核心问题 Java 的 String.split(regex) 默认等价于 split(regex, 0),会静默丢弃尾部的所有空字符串。这个设计在结构化数据处理中是灾难性的。 "A,B,C,".split(","); // ["A", "B", "C"] 长度 3 ❌ 尾部…...
ElevenLabs动画配音语音项目踩坑实录,深度复盘4类合规风险与3种本地化绕过方案
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs动画配音语音项目踩坑实录,深度复盘4类合规风险与3种本地化绕过方案 在为国产原创2D动画《星尘回廊》接入ElevenLabs API实现多语种AI配音时,团队遭遇了超出预期的合规…...
GAD7980 ADC在振动数据采集中的实战应用与设计要点
1. 项目概述:为什么我们需要“快、精、高”的振动数据采集?在工业设备状态监测、精密仪器分析乃至消费电子性能评估领域,振动数据就像设备的“心电图”。它直接反映了机械结构的健康状况、运动部件的平衡性以及系统运行的稳定性。过去&#x…...
新手开发者首次使用 Taotoken 从注册到完成第一个 API 调用的全过程体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 新手开发者首次使用 Taotoken 从注册到完成第一个 API 调用的全过程体验 作为一名刚开始接触大模型应用开发的程序员,我…...
