码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Pytorch中DataLoader的使用方法


    在Pytorch中,torch.utils.data中的Dataset与DataLoader是处理数据集的两个函数,用来处理加载数据集。通常情况下,使用的关键在于构建dataset类。

    一:dataset类构建。

    在构建数据集类时,除了__init__(self),还要有__len__(self)与__getitem__(self,item)两个方法,这三个是必不可少的,至于其它用于数据处理的函数,可以任意定义。

    1. class dataset:
    2. def __init__(self,...):
    3. ...
    4. def __len__(self,...):
    5. return n
    6. def __getitem__(self,item):
    7. return data[item]

    正常情况下,该数据集是要继承Pytorch中Dataset类的,但实际操作中,即使不继承,数据集类构建后仍可以用Dataloader()加载的。

    在dataset类中,__len__(self)返回数据集中数据个数,__getitem__(self,item)表示每次返回第item条数据。

    二:DataLoader使用

    在构建dataset类后,即可使用DataLoader加载。DataLoader中常用参数如下:

    1.dataset:需要载入的数据集,如前面构造的dataset类。

    2.batch_size:批大小,在神经网络训练时我们很少逐条数据训练,而是几条数据作为一个batch进行训练。

    3.shuffle:是否在打乱数据集样本顺序。True为打乱,False反之。

    4.drop_last:是否舍去最后一个batch的数据(很多情况下数据总数N与batch size不整除,导致最后一个batch不为batch size)。True为舍去,False反之。

    三:举例

    兔兔以指标为1,数据个数为100的数据为例。

    1. import torch
    2. from torch.utils.data import DataLoader
    3. class dataset:
    4. def __init__(self):
    5. self.x=torch.randint(0,20,size=(100,1),dtype=torch.float32)
    6. self.y=(torch.sin(self.x)+1)/2
    7. def __len__(self):
    8. return 100
    9. def __getitem__(self, item):
    10. return self.x[item],self.y[item]
    11. data=DataLoader(dataset(),batch_size=10,shuffle=True)
    12. for batch in data:
    13. print(batch)

    当然,利用这个数据集可以进行简单的神经网络训练。

    1. from torch import nn
    2. data=DataLoader(dataset(),batch_size=10,shuffle=True)
    3. bp=nn.Sequential(nn.Linear(1,5),
    4. nn.Sigmoid(),
    5. nn.Linear(5,1),
    6. nn.Sigmoid())
    7. optim=torch.optim.Adam(params=bp.parameters())
    8. Loss=nn.MSELoss()
    9. for epoch in range(10):
    10. print('the {} epoch'.format(epoch))
    11. for batch in data:
    12. yp=bp(batch[0])
    13. loss=Loss(yp,batch[1])
    14. optim.zero_grad()
    15. loss.backward()
    16. optim.step()
  • 相关阅读:
    用户考试分数大于单科科目平均分的查询
    人人都是网站分析师(从分析师视角理解网站和解读数据)-读书笔记4(完结)
    图像频率、采样定理和抗混叠
    Koltin协程:Flow的触发与消费
    echarts-折线图配置详解
    LCR表测电容怎么实现连续测试?ATECLOUD云测试平台帮您解决
    Docker部署nacos 添加配置文件提示: 发布失败。请检查参数是否正确
    代码随想录第44天|动态规划:完全背包理论基础 518.零钱兑换II 377. 组合总和 Ⅳ
    Python机器学习分类算法(一)-- 朴素贝叶斯分类(Naive Bayes Classifier)
    基于最小误差阈值法的特定医学图像分割算法研究-含Matlab代码
  • 原文地址:https://blog.csdn.net/weixin_60737527/article/details/126754254
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号