计算预卷积特征

        当冻结卷积层和训练模型时,全连接层或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)

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

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

相关文章

阿里云云服务器、ACR镜像服务、容器化实战:搭建企业应用

一、容器化基础知识 华为云免费试用服务器:https://activity.huaweicloud.com/free_test/index.html 阿里云docker容器教程:https://edu.aliyun.com/course/3111900/lesson/341807097 查询ip地址:www.ip138.com 二、容器化搭建企业应用实战 2…

2.中国菜刀使用详解(OWASP实战训练)

2.中国菜刀使用详解(OWASP实战训练)(OWASP实战训练) Webshell(1)shell2.php #eval 使用PHP函数,例如PHPinfo(2)Shell3.php #system 使用Linux系统命令,列如ls…

【已解决】Python报错:NameError: name ‘Image‘ is not defined

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《AI实战中的各种bug…

性能评测系列(PT-010):Spring Boot + MySQL,高并发insert

一、测试概述 测试场景 场景编号: PT-010场景描述: Java应用,MySQL单表写测试目的:指定规格、配置、环境下,Java应用数据库简单写场景负载能力评估。(不含调优,所测结果未必是最优结果&#x…

软RAID

硬盘 连续空间 无法 扩容 lvm 非连续空间 可以动态扩容 raid 备份, 提高读写性能,不能扩容 raid 是磁盘的集合,按照排列组合的方法不 一,给 raid 去了不同的名字 raid0 raid1 raid5 raid10 什么是 RAID "RAID"…

计算机网络之UDP协议

一.什么是UDP协议: 1.1UDP的基本概念 UDP协议又叫做用户数据报协议,是一个目标在传输层提供直接发送报文的能力,UDP与TCP相比,它不会拆分数据,它只是能够发送报文。 1.2为什么要使用UDP协议 我们可能会想,如…

three.js - MeshPhongMaterial材质

phong网格材质:Mesh - Phong - Material 一种用于具有镜面高光的光泽表面的材质。 它可以模拟,具有镜面高光的光泽表面,提供镜面反射效果。 MeshPhongMaterial: MeshPhongMaterial是一种基于Phong光照模型的材质,主要…

工作记录2

1. 要实现y轴超出部分滚动的效果&#xff0c;可以这样写 <div style"max-height: 384px; overflow-y: auto;"> </div> 2. 当后端接口还没好的时候&#xff0c;可以自己模拟一下接口返回的数据 export const getCommodityDetail (id) > Promise.re…

MySQL入门学习-连接查询.复杂连接

复杂连接是指涉及多个表之间的连接操作&#xff0c;通过使用条件和连接类型来组合和关联这些表的数据。 一、常见的复杂连接类型及其特点、使用方法和示例代码&#xff1a; 1. INNER JOIN&#xff08;内连接&#xff09;&#xff1a; - 特点&#xff1a;返回两个表中满足连接…

构建实用的Flutter文件列表:从简到繁的完美演进

前言&#xff1a;为什么我们需要文件列表&#xff1f; 在现代科技发展迅速的时代&#xff0c;我们的电脑、手机、平板等设备里积累了大量的文件&#xff0c;这些文件可能是我们的照片、文档、音频、视频等等。然而&#xff0c;当文件数量增多时&#xff0c;我们如何快速地找到…

HTML(20)——定位

定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 定位模式&#xff1a;position边偏移&#xff1a;设置盒子的位置 leftrighttopbottom 相对定位 position&#xff1a;relative 改变位置的参照物是自己原来的位置&#xff0c;并且不脱标占位&#x…

程序员是干嘛的?程序员在职场中的重要性

程序员是干嘛的&#xff1f;程序员在职场中的重要性 随着科技的飞速发展&#xff0c;计算机技术得到了广泛应用&#xff0c;程序员也成为了当今职场中不可或缺的一部分。那么&#xff0c;程序员究竟是干什么的呢&#xff1f;他们为什么如此重要&#xff1f;下面我们来详细探讨一…

驾校预约管理系统

摘 要 随着驾驶技术的普及和交通安全意识的增强&#xff0c;越来越多的人选择参加驾校培训&#xff0c;以获取驾驶执照。然而&#xff0c;驾校管理面临着日益增长的学员数量和繁琐的预约管理工作。为了提高驾校的管理效率和服务质量&#xff0c;驾校预约管理系统成为了必不可少…

微信app支付没上架开通方法

对于许多商家来说&#xff0c;特别是那些经营游戏、商城等拥有自己APP的商家&#xff0c;接入微信支付无疑是一个重要的步骤&#xff0c;它能让用户更方便地进行支付操作&#xff0c;提升购物体验。然而&#xff0c;随着微信支付政策的调整&#xff0c;现在开通APP支付并不像以…

Java抽象类:深入理解与应用

一、引言 在Java的面向对象编程中&#xff0c;抽象类&#xff08;Abstract Class&#xff09;是一个非常重要的概念。它允许我们定义一个类&#xff0c;该类中包含一些抽象方法和非抽象方法&#xff0c;但自己不能被实例化。抽象类主要用于创建类的层次结构&#xff0c;并为子…

单片机练习题6

一、填空 1&#xff0e;如果采用晶振的频率为3MHz&#xff0c;定时器/计数器Tx&#xff08;x0,1&#xff09;工作在方式0、1、2下&#xff0c;其方式0的最大定时时间为 &#xff0c;方式1的最大定时时间为 &#xff0c;方式2的最大定时时间为 。 答…

手机照片压缩到20k以内免费,这几款心动软件快收好!

在数字化时代&#xff0c;手机拍照已成为我们记录生活的重要方式之一。然而&#xff0c;高清的照片也意味着占用着越来越多的手机存储空间。如果你正在为手机内存告急而烦恼&#xff0c;那么这几款手机照片压缩神器或许能成为你的救星&#xff01;它们不仅可以将照片轻松压缩至…

【Linux】多线程的相关知识点

一、线程安全 1.1 可重入 VS 线程安全 1.1.1 概念 线程安全&#xff1a;多个线程并发执行同一段代码时&#xff0c;不会出现不同的结果。常见对全局变量或者静态变量进行操作&#xff0c;并且没有锁的保护的情况下&#xff0c;会出现问题。重入&#xff1a;同一个函数被不同…

vue3通过vue-video-player实现视频倍速、默认全屏、拖拽进度条等功能

效果图&#xff1a; 1、场景&#xff1a; js原生的video标签在不同浏览器及不同型号手机上都展示的不一样&#xff0c;一部分没有倍速&#xff0c;一部分没有全屏等功能&#xff0c;为了统一视频播放的交互功能&#xff0c;使用vue-video-player插件来完成&#xff0c;vue-vid…

Java面试题:讨论事务的ACID属性,并解释在Java中如何管理事务

事务是数据库管理系统中的一组操作&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败&#xff0c;事务的ACID属性确保了数据库系统的可靠性和一致性。ACID是指&#xff1a; Atomicity&#xff08;原子性&#xff09;&#xff1a;事务中的所有操作要么全部完成&#xf…