【加载数据--自定义自己的Dataset类】

【加载数据自定义自己的Dataset类】

  • 1 加载数据
  • 2 数据转换
  • 3 自定义Dataset类
  • 4 划分训练集和测试集
  • 5 提取一批次数据并绘制样例图

假设有四种天气图片数据全部存放与一个文件夹中,如下图所示:

├─dataset2
│      cloudy1.jpg
│      cloudy10.jpg
│      cloudy100.jpg
│      cloudy101.jpg
│      cloudy102.jpg
│      cloudy103.jpg
│      cloudy104.jpg
│      cloudy105.jpg
......

1 加载数据

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import torchvision
import glob
from torchvision import transforms
from torch.utils.data import Dataset
from PIL import Imageimport glob
img_dir = r'./dataset2/*.jpg'
imgs = glob.glob(img_dir) # 读取所有图片路径
print(imgs[:3]) # 打印前3张图片species = ['cloudy', 'rain', 'shine', 'sunrise']species_to_idx = dict((c, i) for i, c in enumerate(species))		# 建立类别和序号字典
print(species_to_idx)idx_to_species = dict((v, k) for k, v in species_to_idx.items())	# 反转类别和序号
print(idx_to_species)

输出如下:

['./dataset2\\cloudy1.jpg','./dataset2\\cloudy10.jpg','./dataset2\\cloudy100.jpg']{'cloudy': 0, 'rain': 1, 'shine': 2, 'sunrise': 3}{0: 'cloudy', 1: 'rain', 2: 'shine', 3: 'sunrise'}

读取路径加载序号作为标签

labels = []
for img in imgs:for i, c in enumerate(species):if c in img:labels.append(i)print(labels[:3])

输出如下:

[0, 0, 0]

方法1:提前划分训练集和测试集,使用乱序后的index进行划分

np.random.seed(2022)
index = np.random.permutation(count)
imgs = np.array(imgs)[index]
labels = np.array(labels, dtype=np.int64)[index]sep = int(count*0.8)
train_imgs = imgs[ :sep]
train_labels = labels[ :sep]
test_imgs = imgs[sep: ]
test_labels = labels[sep: ]

2 数据转换

transforms = transforms.Compose([transforms.Resize((96, 96)),transforms.ToTensor(),transforms.Normalize(mean=[.5, .5, .5], std=[.5, .5, .5])
])

3 自定义Dataset类

class WT_dataset(Dataset):def __init__(self, imgs_path, lables):self.imgs_path = imgs_pathself.lables = lablesdef __getitem__(self, index):img_path = self.imgs_path[index]lable = self.lables[index]pil_img = Image.open(img_path)pil_img = pil_img.convert("RGB")pil_img = transforms(pil_img)return pil_img, labledef __len__(self):return len(self.imgs_path)# 加载数据
dataset = WT_dataset(imgs, labels)

4 划分训练集和测试集

count = len(dataset)
print(count)# 方法2:划分训练集和测试集
train_count = int(0.8*count)
test_count = count - train_count
train_dataset, test_dataset = data.random_split(dataset, [train_count, test_count])
print(len(train_dataset), len(test_dataset))# 批量加载数据
BTACH_SIZE = 16
train_dl = torch.utils.data.DataLoader(train_dataset,batch_size=BTACH_SIZE,shuffle=True
)test_dl = torch.utils.data.DataLoader(test_dataset,batch_size=BTACH_SIZE,
)

5 提取一批次数据并绘制样例图

imgs, labels = next(iter(train_dl))	#提取一批次数据
print(imgs.shape)
im = imgs[0].permute(1, 2, 0)	# 将通道所在列放在后
print(im.shape)plt.figure(figsize=(12, 8))
for i, (img, label) in enumerate(zip(imgs[:6], labels[:6])):img = (img.permute(1, 2, 0).numpy() + 1)/2plt.subplot(2, 3, i+1)plt.title(idx_to_species.get(label.item()))plt.imshow(img)
plt.savefig('pics/example1.jpg', dpi=400)

输出如下:

torch.Size([16, 3, 96, 96])torch.Size([3, 96, 96])torch.Size([96, 96, 3])

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/141279.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【React】JSX语法

目录 一、前言二、JSX介绍三、JSX原理1、DOM结构示例2、HTML的JSX结构示例3、编译之后的代码 四、为什么使用JSX1、JSX的特点2、JSX的书写规范 五、JSX的使用1、嵌入JS表达式2、条件渲染3、列表渲染①、arr.map() 六、组件1、类组件①、实例化组件 2、函数组件3、组件样式①、行…

全自动情感故事对话视频生成神器

搞笑聊天视频是近年来备受欢迎的一种娱乐形式,它能够快速、简单地制作出形象生动、幽默搞笑的对话视频,给人带来欢乐与笑声。而今天,我要向大家介绍的是一款功能强大、操作简单的搞笑聊天视频生成器。 这款聊天视频生成器具备多项令人惊叹的…

排序算法二 归并排序和快速排序

目录 归并排序 快速排序 1 挖坑法​编辑 2 Hoare法 快排的优化 快排的非递归方法 七大排序算法复杂度及稳定性分析 归并排序 归并排序是建立在归并操作上的一种有效的排序算法,将以有序的子序列合并,得到完全有序的序列,即先使每个子序列有序,在使子序列段间有序.若将两…

virtualbox无界面打开linux虚拟机的bat脚本,以及idea(代替Xshell)连接linux虚拟机的方法

virtualbox无界面打开linux虚拟机的bat脚本,以及idea连接linux虚拟机的方法 命令行运行代码成功运行的效果图 idea连接linux虚拟机的方法【重要】查看虚拟机的IP地址idea中选择菜单(该功能可代替Xshell软件)配置设置连接成功进入idea中的命令…

2018-2022年盟浪 ESG数据

2018-2022年盟浪 ESG数据 1、时间:2018-2022年 2、指标:证券代码、证券简称、盟浪ESG评级、省份、城市、所属证监会行业名称[交易日期] 最新收盘日[行业级别] 大类行业、所属证监会行业代码[交易日期] 最新收盘日[行业级别] 大类行业 3、范围&#xf…

ISE_ChipScope Pro的使用

1.ChipScope Pro Core Inserter 使用流程 在之前以及编译好的流水灯实验上进行学习 ChipScope的使用。 一、新建一个ChipScope 核 点击Next,然后在下一个框中选择 Finish,你就会在项目菜单中看到有XX.cdc核文件。 二、对核文件进行设置 右键“Synthesize – XST” …

【LeetCode热题100】--53.最大子数组和

53.最大子数组和 使用动态规划: 状态定义:设动态规划列表dp,dp[i]代表以元素nums[i]为结尾的连续子数组最大和 转移方程:若dp[i-1]≤0,说明dp[i-1]对dp[i]产生负贡献,即dp[i-1]nums[i]还不如nums[i]本身大 初始状态&…

vue+element项目创建步骤

一、创建vue项目步骤 要创建一个Vue Element UI的项目,你可以按照以下步骤进行操作: 1.确保你已经安装了Node.js和npm(Node.js的包管理器)。你可以在命令行中运行以下命令来检查它们是否已经安装: node -vnpm -v2.使…

打开深度学习的锁:(2)单隐藏层的神经网络

打开深度学习的锁 导言PS:神经网络的训练过程一、数据集和包的说明1.1准备文件1.2 需要导入的包 二、构建神经网络的架构三、初始化函数四、激活函数4.1 tanh(双曲正切函数)函数 五,前向传播六、损失函数七、后向传播八、梯度下降…

vite + vue3 + js 搭建组件库 + 核心配置与使用

vite.config.js 这个官网有写 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path" // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],server:{open:true, //自动打开浏览port:8088 //默认…

适用于初学者,毕业设计的5个c语言项目,代码已开源

C语言项目集 项目介绍 该项目适用于初学者学习c语言,也适用于高校学生课程设计,毕业设计参考。 项目并不能满足所有人的需求,可进行项目指导,定制开发。 开源地址 c语言项目代码地址 项目列表 该项目包含如下5个管理系统&am…

游戏录屏软件推荐,教你录制高清游戏视频

“有没有好用的游戏录屏软件推荐呀,最近当上了游戏主播,平台要求每天都要发一个游戏视频,可是我的游戏录屏软件太拉胯了,录制出来的视频非常糊,导致平台审核不通过,所以想问问大家有没有游戏录屏软件推荐一…

Vue的单文件组件(Single File Components):优势与实例

Vue的单文件组件(Single File Components):优势与实例 Vue.js 是一款流行的前端 JavaScript 框架,它采用了一种特殊的组件化开发方式,被称为单文件组件(Single File Components,简称 SFC&#…

Eclipse初步学习使用

1.配置自动填充 window->preference 2.自动判断错误,并给出解决方法 3.创建可执行文件: 新建package, 包内新建 javaclass,选择psvm, 4.编写程序,进行执行 右键,选择 run as applic…

ideogram.ai 不同风格的效果图

https://ideogram.ai/ 提示词: French bulldog with sunglasses, playing skateboarding, speed up, happiness, front viewPhoto 相片 正常照片 Poster 海报 偏绘画,清晰的勾线 3D Render 3D 渲染 胶质感,像 3D 模型 Typography …

MySQL学习笔记15

1、内连接查询(重点): 基本语法: select 数据表1.字段列表,数据表2.字段列表 from 数据表1 inner join 数据表2 on 连接条件; 案例:获取产品表中每个产品的分类信息: mysql> select * from tb_goods …

Linux-文件和目录权限

文章目录 权限的作用普通文本文件的权限作用目录文件权限功能作用 文件权限的设置 权限的作用 权限对于普通文件和目录文件的作用是不一样的。 普通文本文件的权限作用 drwxr-xr-x第二个字母开始是文件的权限表示9列权限,前三列表示文件的"拥有者"对该…

vue组件样式 scoped 冲突

vue组件样式 冲突 <template><div class"base-one">BaseOne</div> </template><script> export default {}; </script>/* 1.style中的样式 默认是作用到全局的2.加上scoped可以让样式变成局部样式组件都应该有独立的样式&…

如何将前后端分离的项目部署在服务器上

宝塔Linux部署&#xff1a; 因为要部署前端我们先下个nigx Tomcat,下载这个只是为了java&#xff0c;它里面包含java的 前端 在去添加站点&#xff0c;域名暂时是自己的公网 然后打开新建的站点&#xff0c;把里面的文件全删掉&#xff0c;再把自己的前端dist里的文件全选拖…

使用ALU,RAM,寄存器打造一个CPU

CPU简介 计算机的心脏是中央处理单元&#xff0c;简称“CPU” 。这篇文章就利用前几篇文章中提到过的ALU,RAM,寄存器组件做一个CPU。 CPU负责运行程序&#xff0c;程序是由一个个操作组成的&#xff0c;这些操作叫做指令&#xff0c;因为他们“指示”计算机要做什么. CPU能做什…