Pytorch DataLoader shuffle验证方式


Posted in Python onJune 02, 2021

shuffle = False时,不打乱数据顺序

shuffle = True,随机打乱

import numpy as np
import h5py
import torch
from torch.utils.data import DataLoader, Dataset  
h5f = h5py.File('train.h5', 'w');
data1 = np.array([[1,2,3],
               [2,5,6],
              [3,5,6],
              [4,5,6]])
data2 = np.array([[1,1,1],
                   [1,2,6],
                  [1,3,6],
                  [1,4,6]])
h5f.create_dataset(str('data'), data=data1)
h5f.create_dataset(str('label'), data=data2)
class Dataset(Dataset):
    def __init__(self):
        h5f = h5py.File('train.h5', 'r')
        self.data = h5f['data']
        self.label = h5f['label']
    def __getitem__(self, index):
        data = torch.from_numpy(self.data[index])
        label = torch.from_numpy(self.label[index])
        return data, label
 
    def __len__(self):
        assert self.data.shape[0] == self.label.shape[0], "wrong data length"
        return self.data.shape[0] 
 
dataset_train = Dataset()
loader_train = DataLoader(dataset=dataset_train,
                           batch_size=2,
                           shuffle = True)
 
for i, data in enumerate(loader_train):
    train_data, label = data
    print(train_data)

pytorch DataLoader使用细节

背景:

我一开始是对数据扩增这一块有疑问, 只看到了数据变换(torchvisiom.transforms),但是没看到数据扩增, 后来搞明白了, 数据扩增在pytorch指的是torchvisiom.transforms + torch.utils.data.DataLoader+多个epoch共同作用下完成的,

数据变换共有以下内容

composed = transforms.Compose([transforms.Resize((448, 448)), #  resize
                               transforms.RandomCrop(300), # random crop
                               transforms.ToTensor(),
                               transforms.Normalize(mean=[0.5, 0.5, 0.5],  # normalize
                                                    std=[0.5, 0.5, 0.5])])

简单的数据读取类, 进返回PIL格式的image:

class MyDataset(data.Dataset):    
    def __init__(self, labels_file, root_dir, transform=None):
        with open(labels_file) as csvfile:
            self.labels_file = list(csv.reader(csvfile))
        self.root_dir = root_dir
        self.transform = transform
        
    def __len__(self):
        return len(self.labels_file)
    
    def __getitem__(self, idx):
        im_name = os.path.join(root_dir, self.labels_file[idx][0])
        im = Image.open(im_name)
        
        if self.transform:
            im = self.transform(im)
            
        return im

下面是主程序

labels_file = "F:/test_temp/labels.csv"
root_dir = "F:/test_temp"
dataset_transform = MyDataset(labels_file, root_dir, transform=composed)
dataloader = data.DataLoader(dataset_transform, batch_size=1, shuffle=False)
"""原始数据集共3张图片, 以batch_size=1, epoch为2 展示所有图片(共6张)  """
for eopch in range(2):
    plt.figure(figsize=(6, 6)) 
    for ind, i in enumerate(dataloader):
        a = i[0, :, :, :].numpy().transpose((1, 2, 0))
        plt.subplot(1, 3, ind+1)
        plt.imshow(a)

Pytorch DataLoader shuffle验证方式

从上述图片总可以看到, 在每个eopch阶段实际上是对原始图片重新使用了transform, , 这就造就了数据的扩增

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于wxpython实现的windows GUI程序实例
May 30 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
Python金融数据可视化汇总
Nov 17 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
Python调用Windows命令打印文件
Feb 07 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
python初步实现word2vec操作
Jun 09 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 Python
python 爬取吉首大学网站成绩单
python 批量压缩图片的脚本
Jun 02 #Python
python操作xlsx格式文件并读取
关于Numpy之repeat、tile的用法总结
Jun 02 #Python
Matlab如何实现矩阵复制扩充
Jun 02 #Python
给numpy.array增加维度的超简单方法
Jun 02 #Python
pytorch model.cuda()花费时间很长的解决
You might like
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
php获取远程文件内容的函数
2015/11/02 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python实现各种插值法(数值分析)
2019/07/30 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
Python接口自动化测试的实现
2020/08/28 Python
美国在线珠宝商店:SZUL
2017/02/11 全球购物
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
教育局长自荐信范文
2013/12/22 职场文书
电子信息工程专业推荐信
2014/02/14 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
如何利用pygame实现打飞机小游戏
2021/05/30 Python
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
python模板入门教程之flask Jinja
2022/04/11 Python