在进行相关平台的练习过程中,由于要自己导入数据集,而导入方法在市面上五花八门,各种库都可以应用,在这个过程中我准备尝试torchvision的库dataset

torchvision.datasets.ImageFolder

简单应用起来非常简单,用torchvision.datasets.ImageFolder实现图片的导入,在随后训练过程中用Datalodar处理后可按批次取出训练集

class ImageFolder(root, transform=None, target_transform=None, loader=default_loader, is_valid_file=None)

ImageFolder有这么几个参数,其中root指的是数据所在的文件夹,其中该文件夹的存储方式应为

root/labels/xxx.jpg

即根据自身分类标签存储在对应标签名的文件夹内

ImageFolder在读入的过程中会自行加好标签,最后形成一对对的数据

另外比较常用的就是transform,表示对于传入图片的预处理,如剪裁,颜色选择等等

比如

transform_t = transforms.Compose([
transforms.Resize([64, 64]),
transforms.Grayscale(num_output_channels=1),
transforms.ToTensor()]
)

具体参数可以上网查看

在之后用DataLodar处理后虽然的确有Shuffle的参数,但是却只是在一个小批次内进行打乱,原本是按照类别存储的,这样的话会导致很严重的过拟合,为了避免这个,我决定常识改写一下Dataset的类(主要是看起来Dataset看起来改写比较顺手...ImageFolder还没有看源码并没要对此下手)

但是Dataset需要读入一个个的训练数据的位置,怎么办呢?我就先写了一个小脚本,生成一个txt文件来存储所有数据的名称(相对路径),同时在这一步就进行打乱操作【一眼看下去甚至会发现init的classnum参数完全没用上(捂脸

import os
import numpy as np
'''
self.target 顺序存储数据集
self.DataFile 存储根目录
self.s 存储所有数据
self.label 存储所有标签及其对应的值
'''
class create_list():
def __init__(self,root,classnum=2):
self.target=open("./Data.txt",'w')
self.DataFile=root
self.s=[]
self.label={}
self.datanum=0 def create(self):
files=os.listdir(self.DataFile)
for labels in files:
tempdata=os.listdir(self.DataFile+"/"+labels)
self.label[labels]=len(self.label)
for img in tempdata:
self.datanum+=1
self.target.write(self.DataFile+"/"+labels+"/"+img+" "+labels+"\n")
self.s.append([self.DataFile+"/"+labels+"/"+img,labels]) def detail(self):
#查看数据数量以及标签对应
print(self.datanum)
print(self.label) def get_all(self):
#查看所有数据
print(self.s) def get_root(self):
#获得根目录
return self.DataFile def shuffle(self):
#获得打乱的存储txt
shuffle_file=open("./Shuffle_Data.txt",'w')
temp=self.s
np.random.shuffle(temp)
for i in temp:
shuffle_file.write(i[0]+" "+str(i[1])+"\n")
return self.DataFile+"/Shuffle_Data.txt" def label_id(self,label):
#获得该标签对应的值
return self.label[label]

数据集的存储方式上的要求跟之前的ImageFolder一样

最终会生成一个这样的txt文件



数据集来源于某x光胸片判断...

而Shuffle操作就是为了生成打乱后的txt文件,我写的比较简单粗暴...先将就看吧,生成后大概就是这个样子



至少真正的做到打乱数据了

完成这个以后,就可以用此来帮助DataLodar了

接下来的代码或许比较辣眼睛...但是事实证明是有用的,但是可能Python技巧不太熟练所以就会显得很生涩...

我重现的Dataset类:

from PIL import Image
import torch class cDataset(torch.utils.data.Dataset):
def __init__(self, datatxt, root="", transform=None, target_transform=None, LabelDic=None):
super(cDataset,self).__init__()
files = open(root + "/" + datatxt, 'r')
self.img=[]
for i in files:
i = i.rstrip()
temp = i.split()
if LabelDic!=None:
self.img.append((temp[0],LabelDic[temp[1]]))
else:
self.img.append((temp[0],temp[0])) self.transform = transform
self.target_transform = target_transform def __getitem__(self, index):
files, label = self.img[index]
img = Image.open(files).convert('RGB')
if self.transform is not None:
img = self.transform(img)
return img,label def __len__(self):
return len(self.img)

其实直接看就能大概看明白,主要也就是要实现类里面的几个方法

class cDataset(torch.utils.data.Dataset):
def __init__():
def __getitem__(self, index):
def __len__(self):

其中getitm类似一次次的取出数据,len就是返回数据集数目

其中init的参数我做了稍许调整,由于我之前的txt内标签是字符串,而为了能让对应生成的tag是所要求的,可以传入一个字典,如:

LabelDic={"NORMAL":0,"PNEUMONIA":1}

这样就可以在之后转化为数字的标签,onehot或者怎么怎么样了,,,

Pytorch数据集读入——Dataset类,实现数据集打乱Shuffle的更多相关文章

  1. 『计算机视觉』Mask-RCNN_训练网络其一:数据集与Dataset类

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  2. pytorch加载语音类自定义数据集

    pytorch对一下常用的公开数据集有很方便的API接口,但是当我们需要使用自己的数据集训练神经网络时,就需要自定义数据集,在pytorch中,提供了一些类,方便我们定义自己的数据集合 torch.u ...

  3. MindSpore数据集mindspore::dataset

    MindSpore数据集mindspore::dataset ResizeBilinear #include <image_process.h> bool ResizeBilinear(L ...

  4. 镶嵌数据集 Mosaic Dataset 的常见数据组织方式

    镶嵌数据集是ESRI公司推出一种用于管理海量影像数据的数据模型,定义在GeoDatabase数据模型中. 它的常见数据组织方式有两种: 1. 源镶嵌数据集 Source Mosaic Dataset ...

  5. 以Network Dataset(网络数据集)方式实现的最短路径分析

    转自原文 以Network Dataset(网络数据集)方式实现的最短路径分析 构建网络有两种方式,分别是网络数据集NetworkDataset和几何网络Geometric Network,这个网络结 ...

  6. Pytorch入门上 —— Dataset、Tensorboard、Transforms、Dataloader

    本节内容参照小土堆的pytorch入门视频教程.学习时建议多读源码,通过源码中的注释可以快速弄清楚类或函数的作用以及输入输出类型. Dataset 借用Dataset可以快速访问深度学习需要的数据,例 ...

  7. PyTorch笔记之 Dataset 和 Dataloader

    一.简介 在 PyTorch 中,我们的数据集往往会用一个类去表示,在训练时用 Dataloader 产生一个 batch 的数据 https://pytorch.org/tutorials/begi ...

  8. Pandas将中文数据集转换为数值类别型数据集

    一个机器学习竞赛中,题目大意如下,本文主要记录数据处理过程,为了模型训练,第一步需要将中文数据集处理为数值类别数据集保存. 基于大数据的运营商投诉与故障关联分析 目标:原始数据集是含大量中文的xls格 ...

  9. ADO.NET之使用DataSet类更新数据库

    1.首先从数据库获得数据填充到DataSet类,该类中的表和数据库中的表相互映射. 2.对DataSet类中的表进行修改(插入,更新,删除等) 3.同步到数据库中:使用SqlDataAdapter实例 ...

随机推荐

  1. VisualStudio自定义调试工具(GIS)

    闲言     偶尔分享技术,对,这次就是偶尔,几年一次(技术自卑).上周末竟然有人催更,也是受宠...若惊.以后会主动定期更的,可能. 前言   Visual Studio 调试器自带很多调试工具,调 ...

  2. mysql操作遇到的坑(第二版)

    1.通过条件查询出上一条与下一条 sql说明:本表关联本表,然后通过其中一个表,查询出对应的条件,再用另外一个表求出上一条与下一条的数据,求出来的数据是多条的 SELECT ua.id, ua.wx_ ...

  3. js中对于数组的操作

    let myArray=[11,22,33]; console.log('原数组:',myArray); myArray.push(44,55); console.log('用push在数组后面插入元 ...

  4. http转换为https

    1.下载ssl 证数 百度ssl 证数都有 其中以便宜ssl为例子 注册登陆 选择免费版 可以使用3个月: 申请过程中需要检测该域名是否为本人所有 ,所以邮箱检测或者域名配置 很简单检测就好了: 验证 ...

  5. github代码仓库提示:“We found a potential security vulnerability in one of your dependencies”

    问题描述: Github上传代码后出现这样的错误: We found a potential security vulnerability in one of your dependencies. A ...

  6. 【NOIP2003】传染病控制

    Description 问题背景: 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府 决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种 ...

  7. bugku--web--输入密码查看flag

    首先打开网页链接 随机五位数的密码爆破,先用python写一个脚本来生成随机五位数: x=range(0,10) f=open("3.txt",'w') for i in x: f ...

  8. 程序员IT狗有什么副业可以做呢?

    1. 开篇 副业有很多,全网有做什么公众号.闲鱼.手机卡,各种各样的都有,大部分是骗子,小部分是通过自己的努力,获得了成功. 从年初就开始实践如何做一个自由职业者,近大半年有一些感受正好一起分享交流一 ...

  9. CentOS 7.6 Telnet服务搭建(Openssh升级之战 第一任务备用运输线搭建)

    (以下内容亲手完成,如果需要搬走记得把写博的小白的名字和邮箱一起搬走) 出来玩(学习),总是要还的! 有不明的问题的时候,都来博客园转转,总能找到答案或者灵感,开博3个月都没发一篇帖(不晓得管理员有何 ...

  10. Struts2:搭建原理

    记录下,struts2的搭建过程: 1核心jar包: struts-2.1.8\apps\struts2-blank-2.1.8.war 解压后 在struts2-blank-2.1.8\WEB-IN ...