深度学习数据集的划分(加载kaggle的dog数据,多gpu训练加载参数)待更新

待更新

把dog-breed-identification.zip 文件放到data文件目录下:
该文件解压之后得到如下:
在这里插入图片描述

遍历train中的所有文件,train_file.split(‘.’)[0]是根据.划分这个文件名,得到前缀和后缀,下标为0的是去掉后缀的文件名。
labels[图片的文件名] 得到图片的标签。
在这里插入图片描述在这里插入图片描述

for data, targets in tqdm.tqdm(train_iter):# 把数据加载到GPU上data = data.to(device)targets = targets.to(device)

由于dataloader已经把类名和id,对应了起来,所以targets是图片对应的id
在这里插入图片描述
图片是 128个,3通道,224 * 224
标签是: 128个图片对应的数字标签

根据文件夹加载数据集,其中文件名是类的名字,程序已经将类的名字映射成了0,1…n

def reorg_train_valid(data_dir, labels, valid_ratio):"""Split the validation set out of the original training set.Defined in :numref:`sec_kaggle_cifar10`"""# The number of examples of the class that has the fewest examples in the# training datasetn = collections.Counter(labels.values()).most_common()[-1][1]# The number of examples per class for the validation setn_valid_per_label = max(1, math.floor(n * valid_ratio))label_count = {}for train_file in os.listdir(os.path.join(data_dir, 'train')):label = labels[train_file.split('.')[0]]fname = os.path.join(data_dir, 'train', train_file)# 文件名 data/train_valid_test/train_valie/dog , 应该是以文件的标签为文件夹,里面放属于该标签的图片copyfile(fname, os.path.join(data_dir, 'train_valid_test','train_valid', label))if label not in label_count or label_count[label] < n_valid_per_label:copyfile(fname, os.path.join(data_dir, 'train_valid_test','valid', label))label_count[label] = label_count.get(label, 0) + 1else:copyfile(fname, os.path.join(data_dir, 'train_valid_test','train', label))return n_valid_per_label

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

读取CSV获取图片,标签键值对

def read_csv_labels(fname):"""Read `fname` to return a filename to label dictionary.Defined in :numref:`sec_kaggle_cifar10`"""with open(fname, 'r') as f:# Skip the file header line (column name)lines = f.readlines()[1:]tokens = [l.rstrip().split(',') for l in lines]return dict(((name, label) for name, label in tokens))

label.csv文件内容

第一行是列名:图片名字,图片类别
在这里插入图片描述

传入该文件到read_csv_labels

labels = d2l.read_csv_labels(os.path.join(data_dir, 'labels.csv'))

labels是图片标签的键值对。

{'000bec180eb18c7604dcecc8fe0dba07': 'boston_bull', '001513dfcb2ffafc82cccf4d8bbaba97': 'dingo', '001cdf01b096e06d78e9e5112d419397': 'pekinese', '00214f311d5d2247d5dfe4fe24b2303d': 'bluetick'}
# 按照测试集比例,把测试集
d2l.reorg_train_valid(data_dir, labels, valid_ratio)
d2l.reorg_test(data_dir)

取出一部分图片,这些图片属于训练的类。但是没有参与训练。

这部分数据集的图片属于的类,没有参与训练。

def load_dog_transform_data(valid_ratio=0.1):# ---------------------------------------下载数据-----------------------------------d2l.DATA_HUB['dog_tiny'] = (d2l.DATA_URL + 'kaggle_dog_tiny.zip','0cb91d09b814ecdc07b50f31f8dcad3e81d6a86d')# 如果使用Kaggle比赛的完整数据集,请将下面的变量更改为Falsedemo = Falseif demo:data_dir = d2l.download_extract('dog_tiny')else:data_dir = os.path.join('data', 'dog-breed-identification')# ---------------------------读取训练数据标签、拆分验证集并整理训练集-----------------------batch_size = 32 if demo else 128labels = d2l.read_csv_labels(os.path.join(data_dir, 'labels.csv'))d2l.reorg_train_valid(data_dir, labels, valid_ratio)d2l.reorg_test(data_dir)# ------------------------------定义数据增强方式------------------------------------transform_train = torchvision.transforms.Compose([# 随机裁剪图像,所得图像为原始面积的0.08〜1之间,高宽比在3/4和4/3之间。# 然后,缩放图像以创建224x224的新图像torchvision.transforms.RandomResizedCrop(224, scale=(0.08, 1.0),ratio=(3.0 / 4.0, 4.0 / 3.0)),torchvision.transforms.RandomHorizontalFlip(),# 随机更改亮度,对比度和饱和度torchvision.transforms.ColorJitter(brightness=0.4,contrast=0.4,saturation=0.4),# 添加随机噪声torchvision.transforms.ToTensor(),# 标准化图像的每个通道torchvision.transforms.Normalize([0.485, 0.456, 0.406],[0.229, 0.224, 0.225])])# 测试时, 我们只使用确定性的图像预处理操作。transform_test = torchvision.transforms.Compose([torchvision.transforms.Resize(256),# 从图像中心裁切224x224大小的图片torchvision.transforms.CenterCrop(224),torchvision.transforms.ToTensor(),torchvision.transforms.Normalize([0.485, 0.456, 0.406],[0.229, 0.224, 0.225])])# ------------------------------划分数据集------------------------------------train_ds, train_valid_ds = [torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train_valid_test', folder),transform=transform_train) for folder in ['train', 'train_valid']]valid_ds, test_ds = [torchvision.datasets.ImageFolder(os.path.join(data_dir, 'train_valid_test', folder),transform=transform_test) for folder in ['valid', 'test']]train_iter, train_valid_iter = [torch.utils.data.DataLoader(dataset, batch_size, shuffle=True, drop_last=True)for dataset in (train_ds, train_valid_ds)]valid_iter = torch.utils.data.DataLoader(valid_ds, batch_size, shuffle=False,drop_last=True)test_iter = torch.utils.data.DataLoader(test_ds, batch_size, shuffle=False, drop_last=False)return train_iter,train_valid_iter,valid_iter,test_iter
def load_best_weight(model,best_weight_path):model_para_dict_temp = torch.load(best_weight_path)model_para_dict = {}for key_i in model_para_dict_temp.keys():model_para_dict[key_i[7:]] = model_para_dict_temp[key_i]  # 删除掉前7个字符'module.'del model_para_dict_tempmodel.load_state_dict(model_para_dict)return model

待更新

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

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

相关文章

国家图书馆论文检索证明申请步骤

国家图书馆论文检索证明申请步骤 登录国家图书馆 咨询提交平台 点击论文收引查证 添加附件这一块&#xff0c;需要自己制作一个有格式的EXCEL 卷&#xff0c;期&#xff0c;页码如何查询&#xff1f; 输入自己的联系方式等待工作人员联系即可

接口获取数据控制台打印有值但是展开又没有了

谷歌浏览器只会展现响应式数据最后的结果&#xff0c;证明原来接口是有值的&#xff0c;后面对这个数据进行操作后&#xff0c;最终没有值了。所以对数据进行操作时最好对数据进行一次深拷贝 JSON.parse(JSON.stringify(data))

堆排序(C语言)

前言 在上一篇内容&#xff1a;大小堆的实现&#xff08;C语言&#xff09;&#xff0c;我们实现了关于创建大小堆的各函数与实现。但是如果突然要使用一个堆排序但是此时并没有一个现成的堆&#xff0c;这就需要花费时间去新建实现堆的插入删除这些操作从而实现一个堆&#xf…

通达信指标公式18:教你2行代码,选股出含有龙字辈的股票

“问财”是同花顺平台上一款专业的财经AI助手&#xff0c;融合了自然语言和语音问答机器人。它提供了多维度的股票、基金、债券数据&#xff0c;并支持自然语言搜索&#xff0c;能够轻松查找所需的信息。对于个人投资者来说&#xff0c;问财最好用的功能是它的条件选股和短线复…

【C++11/线程相关】thread类编写多线程、mutex互斥锁和lock_guard、atomic原子类型

目录 通过thread类编写C多线程程序线程间互斥——mutex互斥锁和lock_guardmutex互斥锁lock_guard 线程间通信C11实现生产者与消费者模型 基于CAS操作的atomic原子类型 橙色 通过thread类编写C多线程程序 为什么结果没有子线程中所打印的字符串呢&#xff1f;因为通过detach进…

代码随想录算法训练营 ---第五十三天

第一题&#xff1a; 简介&#xff1a; 本题和昨天的最大重复子串问题很相似&#xff0c;只不过本题不一定是连续的。 动规五部曲分析如下&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;长度为i-1 的字符串text1与长度为j-1的…

Vue实现图片预览(Viewer.js)

摘要&#xff1a; vue项目开发中遇到一个图片预览的需求&#xff0c;可以切换下一张&#xff0c;就是花里胡哨的&#xff0c;所以找viewer.js的插件 npm install v-viewer -S在项目main.js中加入&#xff1a; Viewer.setDefaults用于更改默认配置&#xff0c;比如我不想要显示…

嘴尚绝卤味:健康卤味,未来餐饮市场的新星

随着人们生活水平的提高&#xff0c;对于吃的要求也越来越高。尤其是在快节奏的现代社会中&#xff0c;健康饮食成为了越来越多人的追求。在这种背景下&#xff0c;健康卤味这一新兴食品品类应运而生&#xff0c;成为了餐饮市场的新宠儿。 一、健康卤味的崛起 传统的卤味制作过…

内容过滤算法:构建数字世界的守护者

目录 引言 1. 内容过滤算法概述 2. 内容过滤算法的分类 2.1 关键词过滤算法 2.2 统计模型 2.3 机器学习算法 2.4 深度学习算法 3. 内容过滤算法在实际应用中的体现 3.1 电子邮件过滤 3.2 社交媒体内容过滤 3.3 网络搜索引擎 4. 内容过滤算法的挑战与未来发展 4.1 对…

编程题:电话号码

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 &#x1f4d1;题目解析 这个题目比较…

【文献阅读】Joint Demosaicing and Denoising with Self Guidance

1. 摘要 近年来&#xff0c;一些神经网络在联合去马赛克和去噪(JDD)方面表现出了良好的效果。大多数算法首先将Bayer原始图像分解为四通道RGGB图像&#xff0c;然后将其输入神经网络。这种做法忽略了一个事实&#xff0c;即绿色通道的采样率是红色和蓝色通道的两倍。在本文中&…

自定义注解验证数据字典选项及bean注入问题

我们在工作中经常需要对字典选项进行定义&#xff0c;如果客户端传来的字典项不符合要求&#xff0c;那么根本无法保存&#xff0c;但是已有的注解并没有字典值的验证&#xff0c;那我们就自己实现一个 一、自定义字典值验证的注解DictValid import javax.validation.Constra…

pycharm 创建vue并实现简易路由功能

使用pycharm创建vue项目时&#xff0c;选择vite来创建vue。为什么使用vite&#xff1f;因为vite是专门针对vue开发的打包框架&#xff0c;以前使用vue-cli来创建vue项目&#xff0c;就是使用的webpack来进行打包的&#xff0c;现在有了vite&#xff0c;就尽量使用vite来创建vue…

备战春招——12.3 算法

哈希表 哈希表主要是使用 map、unordered_map、set、unorerdered_set、multi_&#xff0c;完成映射操作&#xff0c;主要是相应的函数。map和set是有序的&#xff0c;使用的是树的形式&#xff0c;unordered_map和unordered_set使用的是散列比表的&#xff0c;无序。 相应函数…

RabbitMQ 消息中间件 消息队列

RabbitMQ1、RabbitMQ简介 RabbiMQ是⽤Erang开发的&#xff0c;集群⾮常⽅便&#xff0c;因为Erlang天⽣就是⼀⻔分布式语⾔&#xff0c;但其本身并不⽀持负载均衡。支持高并发&#xff0c;支持可扩展。支持AJAX&#xff0c;持久化&#xff0c;用于在分布式系统中存储转发消息&a…

福德植保无人机案例:无人机种地的那些事儿

大家好&#xff0c;今天我要给大家介绍一个非常有趣的案例&#xff0c;那就是我们的福德植保无人机工厂。这个工厂可不简单&#xff0c;它可是无人机植保领域的佼佼者&#xff0c;让我们一起来看看他们的故事吧&#xff01;首先&#xff0c;让我们来了解一下无人机植保这个概念…

ROS-ROS通信机制-话题通信

文章目录 一、话题通信基础知识二、话题通信基本操作2-1 C2-2 Python2-3 C与python节点通信 三、自定义msg3-1 自定义msg3-2 C实现自定义msg调用3-3 Python实现自定义msg调用 一、话题通信基础知识 话题通信实现模型是比较复杂的&#xff0c;该模型如下图所示,该模型中涉及到三…

Kubernetes(K8s) Ingress介绍-08

Ingress介绍 在前面课程中已经提到&#xff0c;Service对集群之外暴露服务的主要方式有两种&#xff1a;NotePort和LoadBalancer&#xff0c;但是这两种方式&#xff0c;都有一定的缺点&#xff1a; NodePort方式的缺点是会占用很多集群机器的端口&#xff0c;那么当集群服务…

中级工程师评审条件:如何成为一名合格的中级工程师

作为一名工程师&#xff0c;不仅需要具备扎实的技术基础和实践能力&#xff0c;还需要通过评审来证明自己的能力水平。在成为一名合格的中级工程师之前&#xff0c;你需要满足一系列评审条件。甘建二今天将详细介绍中级工程师评审的要求和标准&#xff0c;帮助你成为更优秀的工…

树_左叶子之和

//给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 // // // // 示例 1&#xff1a; // // // // //输入: root [3,9,20,null,null,15,7] //输出: 24 //解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24 //…