侵权投诉

利用Python和PyTorch处理面向对象的数据集

FPGA开发圈 2021-08-25 15:30 次阅读

本篇是利用 Python 和 PyTorch 处理面向对象的数据集系列博客的第 2 篇。

如需阅读第 1 篇:原始数据和数据集,请参阅此处。

我们在第 1 部分中已定义 MyDataset 类,现在,让我们来例化 MyDataset 对象

此可迭代对象是与原始数据交互的接口,在整个训练过程中都有巨大作用。

第 2 部分:创建数据集对象

■输入 [9]:

mydataset = MyDataset(isValSet_bool = None, raw_data_path = raw_data_path, norm = False, resize = True, newsize = (64, 64))

以下是该对象的一些使用示例:

■输入 [10]:

# 对象操作示例。

# 此操作用于调用 method __getitem__ 并从第 6 个样本获取标签

mydataset[6][1]

■输出 [10]:

0

■输入 [11]:

# 此操作用于在类声明后打印注释

MyDataset.__doc__

■输出 [11]:

‘Interface class to raw data, providing the total number of samples in the dataset and a preprocessed item’

■输入 [12]:

# 此操作用于调用 method __len__

len(mydataset)

■输出 [12]:

49100

■输入 [13]:

# 此操作用于触发 method __str__

print(mydataset)

原始数据路径为 。/raw_data/data_images/《raw samples》

可迭代对象的重要性

训练期间,将向模型提供多批次样本。可迭代的 mydataset 是获得高级轻量代码的关键。

以下提供了可迭代对象的 2 个使用示例。

示例 1:

我们可以直接获取第 3 个样本张量:

■输入 [14]:

mydataset.__getitem__(3)[0].shape

■输出 [14]:

torch.Size([3, 64, 64])

与以下操作作用相同

■输入 [15]:

mydataset[3][0].shape

■输出 [15]:

torch.Size([3, 64, 64])

示例 2:

我们可以对文件夹中的图像进行解析,并移除黑白图像:

■输入 [ ]:

# 数据集访问示例:创建 1 个包含标签的新文件,移除黑白图像

if os.path.exists(raw_data_path + ‘/’+ “labels_new.txt”):

os.remove(raw_data_path + ‘/’+ “labels_new.txt”)

with open(raw_data_path + ‘/’+ “labels_new.txt”, “a”) as myfile:

for item, info in mydataset:

if item != None:

if item.shape[0]==1:

# os.remove(raw_data_path + ‘/’ + info.SampleName)

print(‘C = {}; H = {}; W = {}; info = {}’.format(item.shape[0], item.shape[1], item.shape[2], info))

else:

#print(info.SampleName + ‘ ’ + str(info.SampleLabel))

myfile.write(info.SampleName + ‘ ’ + str(info.SampleLabel) + ‘ ’)

■输入 [ ]:

# 查找具有非期望格式的样本

with open(raw_data_path + ‘/’+ “labels.txt”, “a”) as myfile:

for item, info in mydataset:

if item != None:

if item.shape[0]!=3:

# os.remove(raw_data_path + ‘/’ + info.SampleName)

print(‘C = {}; H = {}; W = {}; info = {}’.format(item.shape[0], item.shape[1], item.shape[2], info))

修改标签文件后,请务必更新缓存:

■输入 [ ]:

if os.path.exists(raw_data_path + ‘/’+ “labels_new.txt”):

os.rename(raw_data_path + ‘/’+ “labels.txt”, raw_data_path + ‘/’+ “labels_orig.txt”)

os.rename(raw_data_path + ‘/’+ “labels_new.txt”, raw_data_path + ‘/’+ “labels.txt”)

@functools.lru_cache(1)

def getSampleInfoList(raw_data_path):

sample_list = []

with open(str(raw_data_path) + ‘/labels.txt’, “r”) as f:

reader = csv.reader(f, delimiter = ‘ ’)

for i, row in enumerate(reader):

imgname = row[0]

label = int(row[1])

sample_list.append(DataInfoTuple(imgname, label))

sample_list.sort(reverse=False, key=myFunc)

return sample_list

del mydataset

mydataset = MyDataset(isValSet_bool = None, raw_data_path = ‘。./。./raw_data/data_images’, norm = False)

len(mydataset)

您可通过以下链接阅读了解有关 PyTorch 中的可迭代数据库的更多信息:

https://pytorch.org/docs/stable/data.html

归一化

应对所有样本张量计算平均值和标准差。

如果数据集较小,可以尝试在内存中对其进行直接操作:使用 torch.stack 即可创建 1 个包含所有样本张量的栈。

可迭代对象 mydataset 支持简洁精美的代码。

使用“view”即可保留 R、G 和 B 这 3 个通道,并将其余所有维度合并为 1 个维度。

使用“mean”即可计算维度 1 的每个通道的平均值。

请参阅附件中有关 dim 使用的说明。

■输入 [16]:

imgs = torch.stack([img_t for img_t, _ in mydataset], dim = 3)

■输入 [17]:

#im_mean = imgs.view(3, -1).mean(dim=1).tolist()

im_mean = imgs.view(3, -1).mean(dim=1)

im_mean

■输出 [17]:

tensor([0.4735, 0.4502, 0.4002])

■输入 [18]:

im_std = imgs.view(3, -1).std(dim=1).tolist()

im_std

■输出 [18]:

[0.28131285309791565, 0.27447444200515747, 0.2874436378479004]

■输入 [19]:

normalize = transforms.Normalize(mean=[0.4735, 0.4502, 0.4002], std=[0.28131, 0.27447, 0.28744])

# free memory

del imgs

下面,我们将再次构建数据集对象,但这次将对此对象进行归一化:

■输入 [21]:

mydataset = MyDataset(isValSet_bool = None, raw_data_path = raw_data_path, norm = True, resize = True, newsize = (64, 64))

由于采用了归一化,因此张量值被转换至范围 0..1 之内,并进行剪切操作。

■输入 [22]:

original = Image.open(‘。./。./raw_data/data_images/img_00009111.JPEG’)

fig, axs = plt.subplots(1, 2, figsize=(10, 3))

axs[0].set_title(‘clipped tensor’)

axs[0].imshow(mydataset[5][0].permute(1,2,0))

axs[1].set_title(‘original PIL image’)

axs[1].imshow(original)

plt.show()

将输入数据剪切到含 RGB 数据的 imshow 的有效范围内,以 [0..1] 表示浮点值,或者以 [0..255] 表示整数值。

使用 torchvision.transforms

进行预处理

现在,我们已经创建了自己的变换函数或对象(原本用作为加速学习曲线的练习),我建议使用 Torch 模块 torchvision.transforms:

“此模块定义了一组可组合式类函数对象,这些对象可作为实参传递到数据集(如 torchvision.CIFAR10),并在加载数据后 __getitem__ 返回数据之前,对数据执行变换”。

以下列出了可能的变换:

■输入 [23]:

from torchvision import transforms

dir(transforms)

■输出 [23]:

[‘CenterCrop’,

‘ColorJitter’,

‘Compose’,

‘FiveCrop’,

‘Grayscale’,

‘Lambda’,

LinearTransformation’,

‘Normalize’,

Pad’,

‘RandomAffine’,

‘RandomApply’,

‘RandomChoice’,

‘RandomCrop’,

‘RandomErasing’,

‘RandomGrayscale’,

‘RandomHorizontalFlip’,

‘RandomOrder’,

‘RandomPerspective’,

‘RandomResizedCrop’,

‘RandomRotation’,

‘RandomSizedCrop’,

‘RandomVerticalFlip’,

‘Resize’,

‘Scale’,

‘TenCrop’,

‘ToPILImage’,

‘ToTensor’,

‘__builtins__’,

‘__cached__’,

‘__doc__’,

‘__file__’,

‘__loader__’,

‘__name__’,

‘__package__’,

‘__path__’,

‘__spec__’,

‘functional’,

‘transforms’]

在此示例中,我们使用变换来执行了以下操作:

1) ToTensor - 从 PIL 图像转换为张量,并将输出格式定义为 CxHxW

2) Normalize - 将张量归一化

责任编辑:haq

原文标题:开发者分享 | 利用 Python 和 PyTorch 处理面向对象的数据集 - 2:创建数据集对象

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

【RTT大赛作品连载】CH32V1 Python引擎BSP

基于PikaScript超轻量级Python引擎,为CH32V103适配BSP
的头像 PikaScript驱动适配 发表于 10-25 09:42 82次 阅读
【RTT大赛作品连载】CH32V1 Python引擎BSP

如何选择异常检测算法

异常检测(也称为离群点检测)是检测异常实例的任务,异常实例与常规实例非常不同。这些实例称为异常或离群....
的头像 Imagination Tech 发表于 10-25 09:15 138次 阅读

什么是双向数据绑定?

什么是双向数据绑定? 什么是Object.definePropety? ...
发表于 10-25 07:21 0次 阅读

华为开发者大会2021智能硬件开发—正确的数据分级分类

2021年10月22日~24日,华为将在中国松山湖举行2021华为开发者大会,聚焦鸿蒙系统、智能家居....
的头像 汽车玩家 发表于 10-23 15:21 145次 阅读
华为开发者大会2021智能硬件开发—正确的数据分级分类

华为开发者HarmonyOS零基础入门:UI组件设计开发实践

华为开发者HarmonyOS零基础入门:UI组件设计开发实践之图库应用介绍,应用数据加载显示模型图片....
的头像 lhl545545 发表于 10-23 10:58 181次 阅读
华为开发者HarmonyOS零基础入门:UI组件设计开发实践

华为开发者HarmonyOS零基础入门:系统能力调用示例

华为开发者HarmonyOS零基础入门:系统能力调用示例,修改组件属性页面加载参数接收数据连接,优化....
的头像 lhl545545 发表于 10-23 10:44 197次 阅读
华为开发者HarmonyOS零基础入门:系统能力调用示例

开关插座手册_如何用开关/插座组合替换电灯开关

开关插座手册If you’re running out of outlets to plug thi....
发表于 10-23 10:36 5次 阅读
开关插座手册_如何用开关/插座组合替换电灯开关

树莓派基础实验8:振动开关实验

一、介绍   振动开关也称为弹簧开关或振动传感器,是一种电子开关。它会产生振动力,并将结果传送给电路....
发表于 10-23 09:06 3次 阅读
树莓派基础实验8:振动开关实验

分布式锁三个属性和两大类

“分布式锁”这个问题快被说烂了,奈何笔者实在没有找到一个满意的答案,故记录自己寻找答案、总结的过程。....
的头像 数据分析与开发 发表于 10-22 17:30 272次 阅读

埋点实践过程中遇到的一些问题

埋点本身现在已经有太多的集成解决方案,神策、诸葛IO、GIO,但是在实践的过程中仍然还是会碰都很多问....
的头像 数据分析与开发 发表于 10-22 16:33 228次 阅读

支持数据转发和基于FPGA的图像处理卸载的图像采集卡

单输入至四输入的CoaXPress 2.0图像采集卡,支持数据转发和基于FPGA的图像处理卸载 用于....
的头像 广州虹科电子科技有限公司 发表于 10-22 10:38 681次 阅读
支持数据转发和基于FPGA的图像处理卸载的图像采集卡

思迈特软件Smartbi:数据看板搭建的常见错误分析

但在实际工作中,由于拉新、留存、转化分别由市场、产品、运营三个部门负责,用户增长数据分隔在三个部门的....
发表于 10-22 10:37 35次 阅读

北明软件参加华为开发者大会2021

据消息,北明软件参加华为开发者大会2021,北明软件将通过“软件定义世界,数据驱动未来”愿景,全方位....
的头像 lhl545545 发表于 10-22 09:31 284次 阅读

NVIDIA为轻量级地图和精确感知提供高性能计算

NVIDIA DRIVE Orin为轻量级地图和精确感知提供高性能计算。 自动驾驶卡车需要减轻绘制地....
的头像 NVIDIA英伟达企业解决方案 发表于 10-22 09:26 169次 阅读

怎样去提取基于视频流的兴趣HOG特征呢

怎样去提取基于视频流的兴趣HOG特征呢?其具体原理是什么?...
发表于 10-22 06:01 0次 阅读

开关电源拓扑图一览

2019独角兽企业重金招聘Python工程师标准>>> ....
发表于 10-21 17:36 8次 阅读
开关电源拓扑图一览

浅析数据分析之指标设计

数据指标,并不是数据分析和业务同学的专属模块。日常会用到数据指标的,还包括开发(比如机器资源利用率,....
的头像 数据分析与开发 发表于 10-21 14:27 201次 阅读

嵌入式Python环境

本文首发于just4fun缘起这里将讨论的嵌入式Python环境并不是硬件嵌入式开发的那个嵌入式,如....
发表于 10-21 11:21 13次 阅读
嵌入式Python环境

嵌入式c语言 c语言_C和嵌入式C有什么区别?

嵌入式c语言 c语言C programming language was designed by t....
发表于 10-21 10:21 7次 阅读
嵌入式c语言 c语言_C和嵌入式C有什么区别?

数据分析如何中看又中用?送你一套方案大大提升工作效率

相信大多数永洪BI的用户都和我有着同一个苦恼,报告做得越来越复杂后,要找到某个组件变难了。只能点击到....
发表于 10-21 10:16 92次 阅读
数据分析如何中看又中用?送你一套方案大大提升工作效率

嵌入式的上位机界面测试例子

在开发嵌入式软件时,经常要使用一些界面测试例子,如果让别人帮忙开发,当然是比较好的事情,但是在小公司....
发表于 10-20 19:51 8次 阅读
嵌入式的上位机界面测试例子

GPIB仪器控制设备使用GPIB接口将仪器集成到系统中

NI 致力于为半导体、电子、交通运输、航空航天与国防、学术等诸多领域的客户提供服务,主要产品包括数据....
的头像 易络盟电子 发表于 10-20 17:28 342次 阅读

曙光政务数据中台系统江苏工信厅重点首版产品公示

近日,江苏省工业和信息化厅发布了“2021年江苏省重点领域首版次软件产品征集拟推广首版次软件产品名单....
的头像 中科曙光 发表于 10-20 16:36 374次 阅读

Python 中常见的配置文件写法有哪些

  为什么要写配置文件 在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到....
的头像 马哥Linux运维 发表于 10-20 16:11 241次 阅读
Python 中常见的配置文件写法有哪些

简述Python加速运行小窍门

Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,....
的头像 Linux爱好者 发表于 10-20 15:28 930次 阅读

简述ElasticSearch的实现

1.近实时搜索 1.1 实时与近实时 实时搜索(Real-time Search)很好理解,对于一个....
的头像 马哥Linux运维 发表于 10-20 14:45 281次 阅读

一文汇总并发http请求最快的几种实现方式用

假如有一个文件,里面有 10 万个 url,需要对每个 url 发送 http 请求,并打印请求结果....
的头像 Linux爱好者 发表于 10-20 14:36 142次 阅读
一文汇总并发http请求最快的几种实现方式用

探究超大Transformer语言模型的分布式训练框架

NVIDIA Megatron 是一个基于 PyTorch 的框架,用于训练基于 Transform....
的头像 NVIDIA英伟达企业解决方案 发表于 10-20 09:25 360次 阅读

一种通过配方功能实现简单高效控制的方法解析

1 前言 物联网的应用大多基于对各种数据的采集和控制,而一般的工程项目中产生的数据数量都很庞大,若是....
的头像 广州虹科电子科技有限公司 发表于 10-20 09:13 414次 阅读
一种通过配方功能实现简单高效控制的方法解析

浅析Python数据结构与算法

Python数据结构是由哪些部分组成的?
发表于 10-20 06:43 0次 阅读

气体传感器BME688常见问题

在使用传感器的过程中,你是否有很多问号 ——在采样时需要强制空气进入BME688吗? ——由于数据是....
的头像 Bosch Sensortec 发表于 10-19 17:36 359次 阅读
气体传感器BME688常见问题

紫光集团重整最新消息:已确认千亿债权规模

天眼查数据显示,紫光集团公司已经于近日正式开始重整,并已确定债权规模1081.81亿元。并且在未来集....
的头像 lhl545545 发表于 10-19 14:47 667次 阅读

华为刘康:出面向5.5G目标网络架构 以电信云原生为基础

[阿联酋,迪拜,2021年10月13日] 今日,第六届5G核心网峰会(5G Core Summit ....
的头像 华为云核心网 发表于 10-19 14:41 318次 阅读

人工智能如何影响工业物联网

■ 或许这就是为什么在没有IIoT提供关键帮助的情况下,企业很难在工业4.0带来的大规模数字转型中能....
的头像 贸泽电子 发表于 10-19 10:31 1389次 阅读

雷诺汽车使用深度学习网络估计 NOx 排放量

雷诺汽车构建并训练了一个长短期记忆 (LSTM) 网络,该网络预测 NOx 水平的准确率达到了 85....
的头像 MATLAB 发表于 10-19 10:12 264次 阅读

技术和架构选择比以往更重要

在后疫情时代当企业开始尝试复兴和以全新的面貌示人,有一点变得显而易见:技术和架构选择比以往更重要。 ....
的头像 英特尔FPGA 发表于 10-19 09:56 229次 阅读

教你怎样去搜索淘宝API app店

教你怎样去搜索淘宝API app店?
发表于 10-19 09:01 0次 阅读

python是如何实现hbase增删改查的

hbase shell是怎样去创建命名空间的? python是如何实现hbase增删改查的?求解 ...
发表于 10-19 07:26 0次 阅读

我国特高压交直流混联大电网正式运行

近年来,我国逐步形成特高压交直流混联大电网。可满足大容量直流和大规模新能源接入后提高电网仿真精度和效....
的头像 lhl545545 发表于 10-18 17:34 1024次 阅读

数据清洗的步骤是什么

数据清洗是指重复。多余的数据筛选和清除,完整地补充丢失的数据,纠正或删除错误的数据,最后整理成我们可....
发表于 10-18 17:05 40次 阅读

多功能移动环境监测仪的概述及特点

多功能移动环境监测仪介绍FT-BQX10 【风途】山东风途物联网科技有限公司气象站系列有FT-BQX....
发表于 10-18 16:57 68次 阅读

数据中台建设的价值和意义

让数据用起来,产生业务价值是数据中台建设的第一优先级。至于这个用起来的过程是否是自动化的,是否有大数....
发表于 10-18 16:52 53次 阅读

微信回应崩了 微信或将推出深度清理新功能

 今天上午微信大部分用户反映称微信图片打不开、已经无法收发图片、文件,目前微信官方已经对此做出回复称....
的头像 lhl545545 发表于 10-18 16:45 560次 阅读

用在解析云端数据的源码是怎样的

用在解析云端数据的源码是怎样的?如何去实现这种源码呢? ...
发表于 10-18 09:00 0次 阅读

华为创新性地推出“5G新通话”解决方案

在北京国家会议中心举行的2021年中国国际信息通信展览会上,由中国通信企业协会发起的“ICT中国(2....
的头像 华为云核心网 发表于 10-15 17:27 522次 阅读

华为发布SD-WAN逐包负载分担方案 提升带宽利用率

华为SD-WAN逐包负载分担方案,提升带宽利用率至90%,让您的广域网络更加高效。
的头像 华为产品资料 发表于 10-15 16:44 400次 阅读

教大家如何减小微量水分策略的结果中的误差

微量水分测定仪采用卡尔——菲休库仑法,对不同物质进行微量水分测定,是一种可靠的方法,微量水分测定仪成....
发表于 10-15 16:39 34次 阅读

详解工业液体密度测试步骤

业液体通常需要进行液体密度的测试来加以控制品质。行业内的测试仪就是搏仕的液体密度测试仪了。下面将演示....
发表于 10-15 16:27 28次 阅读

音频电路原理(双音频解码电子电路/TDA2822双声道功放电路/音频放大处理电路)

双音多频信号解码电路是目前在按键电话(固定电话、移动电话)、程控交换机及无线通信设备中广泛应用的集成....
发表于 10-15 16:08 1278次 阅读
音频电路原理(双音频解码电子电路/TDA2822双声道功放电路/音频放大处理电路)

浅析压敏(热敏)陶瓷粉末水分测试实验报告

厦门搏仕检测设备有限公司  www.lboshi.cn 18959266236 陶瓷粉末水分含量介绍....
发表于 10-15 15:57 35次 阅读

探究塑料颗粒密度测试仪实验报告

密度计品牌:搏仕 型号:BOS-300系列 测试品:塑料颗粒 塑料种类纷多,密度值各不相同,如PP料....
发表于 10-15 15:47 29次 阅读

塑料水分测定仪测试经验总结

厦门搏仕检测设备有限公司  www.lboshi.cn 18959266236 塑料水分测定仪针对不....
发表于 10-15 15:38 21次 阅读

剖析汽车塑料零配件水分测试仪实验

水分仪品牌:搏仕     型号:BOS-180A系列     测试品:汽车塑料片 塑料的含水量是影响....
发表于 10-15 15:23 18次 阅读

四维图新构建现实世界三维还原的能力赋能智能网联应用

实时构建现实世界三维还原,将物理世界数字化,是四维图新近20年来一直努力的方向,通过对物理世界的人、....
的头像 四维图新NavInfo 发表于 10-15 14:40 1333次 阅读

关于Python18个你不知道的高效编程技巧

初识Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编....
的头像 马哥Linux运维 发表于 10-15 11:23 298次 阅读

完整关注跨模态转换器网络

舞蹈是几乎所有文化中的一种通用语言,也是如今许多人在当代媒体平台上表达自己的一种方式。跳舞的能力(组....
的头像 TensorFlow 发表于 10-15 10:25 216次 阅读

交换模式与路由模式有哪些异同点

交换模式是什么?路由模式又是什么? 交换模式与路由模式有哪些异同点? ...
发表于 10-15 09:35 0次 阅读

Python入门知识汇总

Python代码生成EXE文件的方法是什么?
发表于 10-11 06:00 0次 阅读

什么是Python中的流程控制?

什么是Python中的流程控制?
发表于 10-09 07:24 0次 阅读

ARM架构的数据类型定义是什么

ARM架构的数据类型定义是什么? 局部变量和全局变量是什么意思? ...
发表于 10-09 06:32 0次 阅读