卷积神经网络|制作自己的Dataset

在编写代码训练神经网络之前,导入数据是必不可少的。PyTorch提供了许多预加载的数据集(如FashionMNIST),这些数据集 子类并实现特定于特定数据的函数。 

它们可用于对模型进行原型设计和基准测试,加载这些数据集是十分简单的。好吧,那如何加载自己制作的数据集呢?

简单来讲,自定义数据集类必须实现三个函数:__init__、__len__和__getitem__。下面代码就实现了一个Dataset

import osimport torchfrom torch.utils.data import Datasetfrom torchvision import transformsfrom PIL import Imageimport numpy as npclass MyDataset(Dataset):    def __init__(self, path_file,transform=None,label_transform=None):        self.path_file=path_file        self.imgs=[name for name in os.listdir(path_file)]#获取path_file路径下所有文件名        self.transform = transform        self.label_transform = label_transform    def __len__(self):        return len(self.imgs)    def __getitem__(self, idx):        #get the image        img_path = os.path.join(self.path_file,self.imgs[idx])#获得图片完整路径        image=Image.open(img_path)        image=image.resize((28,28))#修改图片为默认大小        image = np.array(image)        image=torch.from_numpy(image)#将numpy数组转换为张量        image=image.permute(2,0,1)#将H,W,C转换为C,H,W        if self.transform:            image = self.transform(image)        #get the label        str1=self.imgs[idx].split('.')        label=torch.tensor(eval(str1[1]))        if self.label_transform:            label=self.label_transform(label)         return image, label

注:上述代码从路径path_file读取文件,准确来讲应该是我们准备的训练图片,格式如下:     

                 cat1.0.jpg

                  cat2.0.jpg

                  ...

                  dog1.1.jpg

                  dog2.1.jpg

                  ...

图片名重要含义:类别(0,1等)

而cat1,dog1这些并不重要,因为0,1,已经反映了图片的类别,这里仅仅是一个习惯,同样jpg也是如此。

实际上,在我们准备图片时,图片名往往不是这样,但直接写个简单的文件处理程序便很容易转变为上述格式

之所以这样命名,就是为容易获得图片和对应的类别,也就是实现自己的Dataset。当然,其它还有许多方法,但核心就是加载自己的数据时获得图片和对应的类别。

再次看一下实现自己的Dataset的架构:

class CustomImageDataset(Dataset):    def __init__(self, path_file, transform=None, target_transform=None):        ...        ...        ...    def __len__(self):        return len(...)    def __getitem__(self, idx):        ...        ...        ...        if self.transform:            image = self.transform(image)        if self.label_transform:            label = self.label_transform(label)        return image, label

在训练模型时,我们通常希望 在“小批量”中传递样本,在每个时期重新洗牌数据以减少模型过度拟合,并使用 Python 的 加快数据检索速度。

DataLoader是一个迭代对象,它在一个简单的 API 中为我们抽象了这种复杂性。下面我们将Dataset带入DataLoader.

path="E:\\3-10\\dogandcats\\train"#图片所在目录training_data=MyDataset(path)train_dataloader = torch.utils.data.DataLoader(training_data, batch_size=2, shuffle=True)

让我们run一下:

>>> trainimg,label=next(iter(train_dataloader))>>> trainimg.size()torch.Size([2, 3, 28, 28])>>> label.size()torch.Size([2])

结果符合预期,与在使用pytorch预加载的数据集格式一样!

点点点,赞和在看都在这儿!

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

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

相关文章

leetcode贪心(单调递增的数字、监控二叉树)

738.单调递增的数字 给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff…

完善 Golang Gin 框架的静态中间件:Gin-Static

Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架&#xff0c;但是生态中的 Static 中间件使用起来却一直很不顺手。 所以&#xff0c;我顺手改了它&#xff0c;然后把这个改良版开源了。 写在前面 Gin-static 的改良版&#xff0c;我开源在了 soulteary/gin-static&a…

汉字的音韵之美:中文拼音的魅力之旅

导语&#xff1a;中文拼音作为汉字的语音表达方式&#xff0c;已经深入人心。它不仅有助于汉字的学习与传播&#xff0c;还为汉语的国际化铺平了道路。本文将为您详细介绍中文拼音的起源、发展及其在我国教育、科技、文化等方面的广泛应用&#xff0c;带您领略这一古老而又现代…

5.云原生安全之ingress配置域名TLS证书

文章目录 cloudflare配置使用cloudflare托管域名获取cloudflare API Token在cloudflare中配置SSL/TLS kubesphere使用cert-manager申请cloudflare证书安装证书管理器创建Secret资源创建cluster-issuer.yaml创建cert.yaml申请证书已经查看申请状态 部署harbor并配置ingress使用证…

AI 编写完整工程代码:自然语言控制,AI 驱动开发 | 开源日报 No.135

gpt-engineer-org/gpt-engineer Stars: 47.6k License: MIT GPT-Engineer&#xff0c;AI 帮你写代码&#xff01; 工作流程&#xff1a; 通过自然语言指定软件AI 编写和执行代码引导 AI 优化改进 核心优势&#xff1a; 可以编辑 preprompts 文件来指定 AI 代理的 “身份”…

Excel 插件:ASAP Utilities Crack

ASAP Utilities是一款功能强大的 Excel 插件&#xff0c;填补了 Excel 的空白。在过去的 20 年里&#xff0c;我们的加载项已经发展成为世界上最受欢迎的 Microsoft Excel 加载项之一。 ASAP Utilities 中的功能数量&#xff08;300 多个&#xff09;可能看起来有点令人眼花缭乱…

【100个Cocos实例】还记得这个指哪打哪的游戏吗?

引言 Cocos中简易实现炉石目标选择箭头效果 23年1月24日0时&#xff0c;由网易代理的暴雪系列游戏在国内正式终止运营。 炉石传说&#xff0c;一个陪伴了笔者4年的游戏&#xff0c;传说、竞技场12胜历历在目。 转眼停服已经快1年&#xff0c;有小道消息称炉石即将回归国服&…

ECMAScript和JavaScript的区别

ECMAScript和JavaScript是相关但不同的概念。下面详细介绍它们的区别和差异。 1.背景&#xff1a; JavaScript是一种由Ecma国际&#xff08;前身为欧洲计算机制造商协会&#xff09;通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛&#xff0c;它往往被称…

python爬虫实现获取招聘信息

使用的python版本&#xff1a; 3.12.1 selenium版本&#xff1a;4.8.0 urllib版本&#xff1a;1.26.18 from selenium import webdriver from selenium.webdriver import ActionChains import timeimport re import xlwt import urllib.parsedef get_html(url):chrome_drive…

CMake入门教程【核心篇】添加库(add_library)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 基本用法2.STATIC…

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果

原创作者&#xff1a;恋猫de小郭 相信大家都已经听说过&#xff0c;明年的 Harmony Next 版本将正式剥离 AOSP 支持 &#xff0c;基于这个话题我已经做过一期问题汇总 &#xff0c;当时在 现有 App 如何兼容 Harmony Next 问题上提到过&#xff1a; 华为内部也主导适配目前的主…

力扣题:高精度运算-1.2

力扣题-1.2 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;415. 字符串相加 解题思想&#xff1a;从后往前遍历两个字符串,然后进行相加即可 class Solution(object):def addStrings(self, num1, num2):""":type num1: str:type …