首页 > 其他分享 >学习笔记15:第二种加载数据的方法

学习笔记15:第二种加载数据的方法

时间:2024-06-04 09:45:45浏览次数:26  
标签:__ 15 img self labels 第二种 imgs ds 加载

转自:https://www.cnblogs.com/miraclepbc/p/14367560.html

构建路径集和标签集

取出所有路径

import glob
all_imgs_path = glob.glob(r"E:\datasets2\29-42\29-42\dataset2\dataset2\*.jpg")

获得所有标签

species = ['cloudy', 'rain', 'shine', 'sunrise']
all_labels = []
for img in all_imgs_path:
    for i, c in enumerate(species):
        if c in img:
            all_labels.append(i)

定义数据集类

# 必须创建 __getitem__, __len__, __init__
class Mydataset(data.Dataset):
    def __init__(self, img_paths, labels, transform):
        self.imgs = img_paths
        self.labels = labels
        self.transforms = transform
    def __getitem__(self, index):
        img = self.imgs[index]
        label = self.labels[index]
        pil_img = Image.open(img)
        data = self.transforms(pil_img)
        return data, label
    def __len__(self):
        return len(self.imgs)
  • 基本属性是:数据集里面的图像是谁,相应的标签是谁,变换方式有什么
  • getitem是索引方法
  • len是返回数据集长度

划分训练集和测试集

这里需要将所有路径进行乱序,再将标签相应的乱序。取出前80%为训练集,其他为测试集

index = np.random.permutation(len(all_imgs_path))
all_imgs_path = np.array(all_imgs_path)[index]
all_labels = np.array(all_labels)[index]
s = int(len(all_imgs_path) * 0.8)

构建训练集和测试集

transform = transforms.Compose([
    transforms.Resize((96, 96)),
    transforms.ToTensor()
])
train_ds = Mydataset(all_imgs_path[:s], all_labels[:s], transform)
test_ds = Mydataset(all_imgs_path[s:], all_labels[s:], transform)

train_dl = data.DataLoader(train_ds, batch_size = 8, shuffle = True)
test_dl = data.DataLoader(test_ds, batch_size = 8)

构建其他数据集

如果需要对刚刚构建的数据集进行一些其他变换
比如:原来是channel, height, width,现在要改成height, width, channel
这时候可以构建一个新的数据集类

class New_dataset(data.Dataset):
    def __init__(self, some_ds):
        self.ds = some_ds
    def __getitem__(self, index):
        img, label = self.ds[index]
        img = img.permute(1, 2, 0)
        return img, label
    def __len__(self):
        return len(self.ds)

测试一下:

train_new_ds = New_dataset(train_ds)
img, label = train_new_ds[2]

这个时候,img的shape就是(96, 96, 3)

标签:__,15,img,self,labels,第二种,imgs,ds,加载
From: https://www.cnblogs.com/gongzb/p/18230163

相关文章

  • [NOIP2015 提高组] 跳石头
    [NOIP2015提高组]跳石头跳石头题目描述一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有$N$块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点......
  • HarmonyOS NEXT星河版之自定义List下拉刷新与加载更多
    文章目录一、加载更多二、下拉刷新三、小结一、加载更多借助List的onReachEnd方法,实现加载更多功能,效果如下:@ComponentexportstructHPList{//数据源@PropdataSource:object[]=[]//加载更多是否ing@StateisLoadingMore:boolean=false......
  • Windows 隐式加载任意目录下动态库的方法
    windows平台下,dll的加载方式分为显式加载和隐式加载。隐式加载需要在程序链接期间指定依赖库的名称、路径等信息,程序运行时由系统自动进行处理;显式加载则是直接调用系统APILoadLibrary/FreeLibrary来加载或卸载dll模块。通常情况下,这两种方式可以处理绝大多数的应用需求。......
  • 儿童有声挂图的芯片AD156—云信通讯
    有声挂图是一种结合了图像和声音的媒体形式,用户可以触发图像上的声音,从而获得与图像内容相关的音频信息。这种融合了视觉和听觉的交互方式,既满足了人们对美感和观感的需求,又提高了信息传递的效果和效率。有声挂图作为孩子的辅助教材,是帮助孩子学习汉语拼音的好老师。由电台播......
  • GM7109 150KHz,3A降压开关稳压器芯片IC
    一般描述    GM7109系列是专为降压型开关稳压器提供所有有源功能,并驱动最大负载电流高达3A的线路和负载调节(仅适用于ESOP8封装产品)。GM7109可在3.3V,5V的固定输出电压,和一个多功能可调输出版本。这些调节器使用简单,需要最少数量的外部元件。该功能包括内部频率补偿和......
  • 基于单片机8155四层电梯控制系统设计
    **单片机设计介绍,基于单片机8155四层电梯控制系统设计文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于单片机8155的四层电梯控制系统设计概要如下:一、系统概述本设计旨在通过单片机8155为核心控制器,构建一个四......
  • 西屋1C31157G03
    自动化设备常用的板卡种类有多种,包括运动控制、数据采集、图像处理、通信等,选型要点包括性能指标、接口标准、兼容性等。一、运动控制板卡运动控制板卡是自动化设备中重要的板卡之一,其主要功能是控制电动机或执行器的运动,实现设备的定位、速度控制和加速度控制。常见的运动控......
  • u-boot 手动从tftp加载镜像执行
    U-Boot确实支持手动从TFTP加载镜像并执行。以下是关于如何在U-Boot中手动从TFTP加载镜像执行的命令和步骤的详细解释:1.**搭建TFTP服务器**:-在你的主机上(通常是Linux系统),你需要首先搭建一个TFTP服务器。这通常涉及到安装TFTP服务软件(如`tftpd-hpa`)并配置其工......
  • LeetCode 1151. 最少交换次数来组合所有的 1
    1151.最少交换次数来组合所有的1给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的1组合到一起,并返回所有可能中所需 最少的交换次数。示例1:输入:data=[1,0,1,0,1]输出:1解释:有三种可能的方法可以把所有的1组合在一起:[1,1,1,0,0],交换......
  • 20211215-sdf测试2-openssl
    以下是按照Markdown格式整理的你所需要的代码和操作过程,使用中文描述:任务详情在openEuler(推荐)、Ubuntu或Windows(不推荐)中完成以下任务。参考网内容以及AI给出的详细过程,否则不得分。0.根据gmt0018标准,如何调用接口实现基于SM3求你的学号姓名的SM3值?#include"sd......