Pytorch关于Dataset 的数据处理
作者:游客26024 发布时间:2021-04-16 08:40:54
Pytorch系列是了解与使用Pytorch编程来实现卷积神经网络。
学习如何对卷积神经网络编程;首先,需要了解Pytorch对数据的使用(也是在我们模型流程中对数据的预处理部分),其中有两个包Dataset,DataLoader
。Dataset
是Pytorch
对于单个数据的处理类似于给一堆数据进行编号,(在有标签的图像处理中)对其有序地提取图像与标签,
而DataLoader
则是一坨一坨的数据进行批次的处理。
此实验运用的数据是北邮邓伟洪老师的人脸表情包的数据集,
当然大家也可以自己手动做个二分类数据集之类的就将一幅幅的图片放图标签命名的文件夹中即可。
将邓伟洪老师的RAF-DB
简单来刨析,假设其只有Image
,没有真正的Annotation
等,
则其根路径(整个data的大体位置)设为 root_dir = "D:\data\basic"
(由于以下考虑了Annotation
,"Image
"放入label)标签路径(data下的label位置)设为label_dir="Image\aligned(original)"
可参考下图理解:
假设aligned
与original
是标签,但是它是真正的图片的路径
现在开始编程:
因为使用Dataset
,即让新的类(MyData
)来继承Dataset
需要改写 def __getitem__(self,item):
与 def __len__(self):
其中, def __getitem__ (self,item):
输入一系列图像的path与图像的index(组合为一张图像的详细地址),输出图像与标签,代码中默认item
为序列号,但是为了方便将item改写为idx;def __len__(self):
输入一系列图像的路径,输出这些图像的个数。
其他的函数就可以创新加载自己定义的类里。
from torch.utils.data import Dataset #Dataset的包
import os #路径需要这个
import cv2 # 需要读取图片,最好用opencv-python,当然也可以用PIL只是我不顺手
class MyData(Dataset): #我定义的这个类
def __init__(self, root_dir, label_dir):
#下面需要使用的变量,在__init__定义好,
self.root_dir = root_dir # 根路径 data在电脑或者服务器大致的位置
self.label_dir = label_dir # label的位置(这里假设Image的名字就是label的位置)
self.path = os.path.join(self.root_dir, self.label_dir)# 将这个两个合在一起就能找到整体图片的大致路径
self.img_path = os.listdir(self.path) #得到整体图片的路径(可取其中的一张一张的图像的名字)
def __getitem__(self, idx):
# 改写__getitem__(self,item)函数,最后得到图像,标签
#获取具体的一幅图像的名字
img_name = self.img_path[idx]
#获取一幅图像的详细地址
img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
#用opencv来读取图像
img = cv2.imread(img_item_path)
#获取标签(这里简单写了aligned与original)
label = self.label_dir
return img, label
def __len__(self):
#改写整体图像的大小
return len(self.img_path)
root_dir = "D://data//basic"
img_dir = "Image"
aligned_label_dir = "aligned"
# aligned_label_dir = "Image//aligned"
aligned_label_dir = os.path.join(img_dir, aligned_label_dir)
original_label_dir = "original"
#original_label_dir = "Image//original"
original_label_dir = os.path.join(img_dir, original_label_dir)
#aligned_data = "D://data//basic//Image//aligned"
aligned_data = MyData(root_dir, aligned_label_dir)
#original_data = "D://data//basic//Image//original"
original_data = MyData(root_dir, original_label_dir)
data = aligned_data + original_data
# 15339
print(len(aligned_data))
# 15339
print(len(original_data))
# 30678
print(len(data))
img_1, label_1 = data[15338]
img_2, label_2 = data[15339]
print(label_1) # Image\aligned
print(label_2) # Image\original
来源:https://blog.csdn.net/XiaoyYidiaodiao/article/details/121960837
猜你喜欢
- 本文实例讲述了python中while循环语句用法。分享给大家供大家参考。具体如下:number = 1while number <
- 我需要使用tesseract-OCR的模块,vs的配置有点麻烦,所以采用py的环境,搭建。1.在python.org网站下载python3.
- 在日常的python编程中使用这几个函数来简化我们的编程工作,经常使用能使编程效率大大地提高。1. Map 函数map函数可以使用另外一个函
- Lists列表可以包含不同类型的元素,甚至是Lists,但是通常是同一个类型的。if __name__ == '__main__&#
- Variant变量一般会将其代表的数据子类型自动转换成合适的数据类型,但有时候,自动转换也会造成一些数据类型不匹配的错误.这时,可使用转换函
- Asp定时执行操作、Asp定时读取数据库(网页定时操作详解)'----------------------版权信息---------
- 本文实例为大家分享了python3.6实现弹跳小球游戏的具体代码,供大家参考,具体内容如下import randomimport timef
- 变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存
- MNIST数据集比较小,一般入门机器学习都会采用这个数据集来训练下载地址:yann.lecun.com/exdb/mnist/有4个有用的文
- 运行效果:完整代码from tkinter import *import tkinter.messageboximport base64fr
- 聚集索引,数据实际上是按顺序存储的,数据页就在索引页上。就好像参考手册将所有主题按顺序编排一样。一旦找到了所要搜索的数据,就完成了这次搜索,
- 最近重新温习了一次《javascript设计模式》,确实是一本好书,每次看都有不同的领悟,每次领悟到的都受益匪浅,无怪古圣人都说学无止镜了,
- 大部分服务器管理员知道MySQL数据库管理系统(RDBMS)是高度灵活的软件块,带有范围广阔的启动选项,可以用来修改相关行为。然而,大部分人
- Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档。同时借助Google和百度。本文介绍的
- 前言xml课的第三第四个作业都是用java编程来实现xml dom的一些转换, 因为自己没怎么学过java,因此和老师说了下想用python
- python的变量与赋值1.变量的命名规则变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者
- 在 Python 中,当您尝试访问甚至不存在的列表的索引时,会引发 IndexError: list assignment index ou
- 前言在默认情况下,Python的新类和旧类的实例都有一个字典来存储属性值。这对于那些没有实例属性的对象来说太浪费空间了,当需要创建大量实例的
- 我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做 timeout ,就是指在网络请求发出开始计算,如果超过 t
- 外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM 子句中指定外联接时,可以由下列几组