Pytorch ——基础指北_肆

系列文章目录

Pytorch ——基础指北_零
Pytorch ——基础指北_壹
Pytorch ——基础指北_贰
Pytorch ——基础指北_叁


文章目录

  • Pytorch ——基础指北_肆
    • 系列文章目录
    • 软件环境:
    • 配套代码下载地址:
    • 基础知识:
      • python 的异常触发
      • python 的列表解析
      • Python的DataFrame
      • Python的enumerate
    • Pytorch的数据加载
      • 如何导入数据并转换为Dataset(数据集)?
    • 数据集的迭代与操作
      • 如何使用Dataloader呢?

软件环境:

  • pytorch 1.10
  • pycharm

配套代码下载地址:

gitee-pytorch

基础知识:

python 的异常触发

我们可以使用raise语句自己触发异常

raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。如果你不懂异常没关系,只要知道是主动的报告代码运行错误就可以。

python 的列表解析

根据已有列表,高效创建新列表的方式。

列表解析(list comprehension)提供了一种优雅的生成列表的方法,能用一行代码代替十几行代码,而且不损失任何可读性。而且,性能还快很多很多(50%)。

它的基本结构是:

[expr for iter_var in iterable if cond_expr]#表达式+for循环+条件表达式

构建完成后返回一个list列表,对于第一个表达式甚至可以加入 if else。

举个例子:

numbers = [1,2,3,4,5,6,11,12]
>>>max=10
>>>[ i for i in numbers if i >max ]
>>>[11, 12]

通过表达式返回大于10的所有数据。

PyDev console: starting.
Python 3.8.12 (default, Oct 12 2021, 03:01:40) [MSC v.1916 64 bit (AMD64)] on win32
>>>numbers = [1,2,3,4,5,6,7,89]
#返回大于5的构成的列表。
>>>[i if i >5 else 0  for i in numbers]
>>>[0, 0, 0, 0, 0, 6, 7, 89]
>>>[i if i >5 else None  for i in numbers]
>>>[None, None, None, None, None, 6, 7, 89]
#小于5增加100返回
[i if i >5 else i+100  for i in numbers]
[101, 102, 103, 104, 105, 6, 7, 89]

Python的DataFrame

DataFrame是一种表格型数据结构。通过行和列的索引可以快速定位数据位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvjIghj2-1647422654101)(pytorch_5.assets/pandas-DataStructure.png)]

pandas.DataFrame( data, index, columns, dtype, copy)
  • data:一组数据(ndarray、series, map, lists, dict 等类型)。
  • index:索引值,或者可以称为行标签。
  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
  • dtype:数据类型。
  • copy:拷贝数据,默认为 False。

样例:

data = [['zzy', 3], ['jszszzy', 6], ['zzys', 4]]
df = pd.DataFrame(data, columns=['name', 'length'])
print(df)

结果:

      name  length
0      zzy       3
1  jszszzy       6
2     zzys       4

如果想访问行可以这样:

print(df.loc[0])

访问某两行:

print(df.loc[[0, 1]])
>>>     name  length
0      zzy       3
1  jszszzy       6
#此时相当于一个小DataFrame

访问某一列:

print(df["name"])
>>>
0        zzy
1    jszszzy
2       zzys

同时限定行和列:

print(df.iloc[0:1,0])
>>>
0    zzy
Name: name, dtype: object

可以看到同时支持列号和行号。

print(df.shape)
>>>
(3, 2)

shape函数,返回的是元组(不可变的列表)

  • hg.shape返回的是hg的行数和列数
  • hg.shape[0]返回的是hg的行数,有几行
  • hg.shape[1]返回的是hg的列数,有几列

Python的enumerate

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence, [start=0])
  • sequence – 一个序列、迭代器或其他支持迭代对象。
  • start – 下标起始位置的值。

我们需要输出下标的同时输出内容时可以使用它:

>>> seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
...
0 one
1 two
2 three

Pytorch的数据加载

为什么使用数据加载?在前面几节课我们知道函数关系的情况下可以随机生成数据集,每次训练的时候直接把所有数据都送进去进行加载是不现实的,当数据量巨大的时候你的显存可能撑不住,所以我们就需要一个工具类来实现对数据集的管理,torch.utils.data.dataset,dataloader就是这样的类,通过继承这个类并将里面的内容重写,我们能非常方便的实现对数据集的操作。

首先我们需要下载数据集:

数据集下载

下载解压后放到目录中:

如何导入数据并转换为Dataset(数据集)?

首先我们需要将这个类引用过来:

from torch.utils.data import Dataset, DataLoader

引用以后还需要将其内部的三个方法实现以便于使用:

class Mydataset(Dataset):def __init__(self):#初始化构造数据集def __getitem__(self,index):#获取元素    def __len__(slef):#获取数据总长度

下面展示一下如何实现一个Dataset

首先是初始化数据集,实现内部三个方法:

首先是初始化:

    def __init__(self):lines = open(data_path, "rb")lines = [[i[:4].strip(), i[4:].strip()] for i in lines]#分割数据去除内部空格等冗余信息self.df = pd.DataFrame(lines, columns=["label", "sms"])#调整行标

​ 初始化的思路很简单就是将每组数据结合起来然后转化成DataFrame的形式。

再就是__ getitem__方法:

    def __getitem__(self, index):item = self.df.iloc[index,:]return item.values[0],item.values[1]#这里是获取DataFrame的内容·,返回为字典,调用values分解

最后是__ len__方法:

    def __len__(self):return self.df.shape[0]#这里使用了DataFrame的shape方法获取行数。

数据集的迭代与操作

通过Dataset我们成功地将一个文本数据导入并对其进行了处理成功转化成一个通用的数据集类。但是我们还有很多操作没有实现:

  • 批处理数据(Batching the data)
  • 打乱数据(Shuffling the data)
  • 使用多线程 multiprocessing 并行加载数据。
  • 对多余的数据进行处理drop_last

在pytorch中如何对数据集进行操作呢?

这就来到了Dataloader类:

如何使用Dataloader呢?

使用很简单:

 mydataloader = DataLoader(dataset=mydataset, batch_size=10, shuffle=True, num_workers=2)

调用其类的初始化来实例化对象,产生一个mydataloader,在实例化的过程中通过参数来调整数据集。

dataset就是需要操作的dataset对象,

batch_size就是每批的数据大小,

shuffle是否进行随机打乱处理,

num_workers是多线程加载数据集的数量,

drop_last是 是否进行丢去数据集的零头,因为数据数量对batch_size来说总不是一定能整除的,最后一组可能并不能占满。

mydataloader = DataLoader(dataset=mydataset, batch_size=10, shuffle=True, num_workers=3, drop_last=True)

那么我们该怎么查看修改后的数据集呢?

这里需要说明的是,在构造数据的时候我们采用的是两种为一组的方式,也就是:

标签+数据内容,在迭代输出的时候也要将两个数据都取出来,你可以直接迭代:

    for label in mydataloader:print(label)

输出:

[('ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'spam', 'ham', 'spam', 'ham'), ('Only saturday and sunday holiday so its very difficult:)', "Oh right, ok. I'll make sure that i do loads of work during the day!  got a really nasty cough today and is dry n shot so that should really help it!", "That's one of the issues but california is okay. No snow so its manageable", "How have your little darlings been so far this week? Need a coffee run tomo?Can't believe it's that time of week already …", "Don't fret. I'll buy the ovulation test strips and send them to you. You wont get them til like march. Can you send me your postal address.u'll be alright.Okay.", 'Ok anyway no need to change with what you said', 'PRIVATE! Your 2004 Account Statement for 07742676969 shows 786 unredeemed Bonus Points. To claim call 08719180248 Identifier Code: 45239 Expires', "That's the trouble with classes that go well - you're due a dodgey one … Expecting mine tomo! See you for recovery, same time, same place", 'FREE for 1st week! No1 Nokia tone 4 ur mobile every week just txt NOKIA to 8077 Get txting and tell ur mates. www.getzed.co.uk POBox 36504 W45WQ 16+ norm150p/tone', 'After completed degree. There is no use in joining finance.')]
****************************************************************************************************
[('ham', 'ham', 'ham', 'ham', 'spam', 'spam', 'ham', 'ham', 'ham', 'ham'), ('I only work from mon to thurs but Sat i cant leh... Booked liao... Which other day u free?', 'Do I? I thought I put it back in the box', 'Dont search love, let love find U. Thats why its called falling in love, bcoz U dont force yourself, U just fall and U know there is smeone to hold U... BSLVYL', 'Long after I quit. I get on only like 5 minutes a day as it is.', 'URGENT! We are trying to contact U. Todays draw shows that you have won a £2000 prize GUARANTEED. Call 09058094507 from land line. Claim 3030. Valid 12hrs only', 'Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days.', 'Ok...', 'Tmrw. Im finishing 9 doors', 'Love it! The girls at the office may wonder why you are smiling but sore...', '"YEH I AM DEF UP4 SOMETHING SAT,JUST GOT PAYED2DAY & I HAVBEEN GIVEN A£50 PAY RISE 4MY WORK & HAVEBEEN MADE PRESCHOOLCO-ORDINATOR 2I AM FEELINGOOD LUV"')]
****************************************************************************************************

可以看到每一组数据其实分开了两部分并组合成一个list,list里面是根据batch_size 大小构成的两个元组。

当然你也可以这样迭代,就直接会拆分成两个元组,用起来很方便。

    for (label, sms) in mydataloader:print(label, sms)print("*" * 100)#分隔符

到这里所有的内容就都完成了。

Pytorch ——基础指北_肆 [构建数据集与操作数据集]相关推荐

  1. Pytorch ——基础指北_叁 [Pytorch API 构建基础模型]

    Pytorch --基础指北_叁 系列文章目录 Pytorch --基础指北_零 Pytorch --基础指北_壹 Pytorch --基础指北_贰 Pytorch --基础指北_叁 文章目录 Pyt ...

  2. PyTorch基础与简单应用:构建卷积神经网络实现MNIST手写数字分类

    文章目录 (一) 问题描述 (二) 设计简要描述 (三) 程序清单 (四) 结果分析 (五) 调试报告 (六) 实验小结 (七) 参考资料 (一) 问题描述 构建卷积神经网络实现MNIST手写数字分类 ...

  3. Pytorch基础之张量的存储方式及维度操作:size,shape,view,reshape,contiguous

    参考书目:张校捷,<深入浅出PyTorch:从模型到源码> Pytorch中张量的存储 假设存在一个k维张量,其维数为[ n 1 , n 2 . . . n k n_1,n_2...n_k ...

  4. _【超详细指北】python大作业!

    [超详细指北]python大作业! ​ 这是笔者最近写python大作业时写的一个实现过程笔记,也就是基本上可以说是本人从0开始上手的一个python练习.程序和本文档从 4.29-5.15日 总共历 ...

  5. Pytorch基础操作 —— 6. 如何使用自定义数据集

    文章目录 自定义数据集 Step 1. 熟悉你的数据集 有数据就要有标签 数据大小.维度一定要一样 归一化 Step 2. 确定如何加载你的数据集 使用 DataLoader 批量加载数据 需要注意的 ...

  6. pytorch神经网络因素预测_实战:使用PyTorch构建神经网络进行房价预测

    微信公号:ilulaoshi / 个人网站:lulaoshi.info 本文将学习一下如何使用PyTorch创建一个前馈神经网络(或者叫做多层感知机,Multiple-Layer Perceptron ...

  7. vue如何生成公钥私钥_百行Python代码演示1私钥生成多公链公钥原理。|区块链财富指北私钥篇(2)...

    <区块链财富指北>系列文章由NOCY.COM策划,肖南飞主笔撰写. 技术选型基于BOScore公链,旨在以有趣易懂的方式传播普及区块链技术,不构成任何投资建议! 学习之前说学习 今天这篇文 ...

  8. 乐高机器人 搭建钟摆_乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚...

    乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚 2019-06-27 07:30:00 32点赞 67收藏 11评论 又又又见面了各位值友,618期间,我入手了两套Lego 3107 ...

  9. 【神经网络】Pytorch构建自己的训练数据集

    [神经网络]Pytorch构建自己的训练数据集 ​ 最近参加了一个比赛,需要对给定的图像数据进行分类,之前使用Pytorch进行神经网络模型的构建与训练过程中,都是使用的Pytorch内置的数据集,直 ...

最新文章

  1. mongoDB数据库操作工具库
  2. 理论与实践中的CNN模型结构,如何引领深度学习热潮
  3. 打开Office时出现“运行时错误91”问题的解决办法
  4. VS中遇到 _WIN32_WINNT not defined
  5. nodejs 全局变量和全局对象
  6. oracle expdp自动导出数据,Oracle expdp数据泵远程导出
  7. 导出Oracle数据库用户Procedure和Function为文本文件的小工具
  8. 2019-2020年中国小吃产业发展报告
  9. EasyIPCamera高性能摄像机RTSP服务器RTSPServer解决方案
  10. Android,已知应用名称, 通过应用名称来启动应用
  11. uCharts图表在小程序中的使用
  12. ie6-7中会出现图片下有空隙
  13. java获取当前上一周、上一月、上一年的时间dxl
  14. Gdiplus的使用 gdi+
  15. 错误java.lang.NoClassDefFoundError: org/jaxen/VariableContext
  16. 1+X计算机视觉考证一些知识点
  17. 网络爬虫-re库-正则表达式
  18. android power 按键,android 添加按(power键)电源键结束通话(挂断电话)
  19. 阿里数据中台与OneData
  20. win32.mak下载地址github

热门文章

  1. 做到这一点,你也可以成为优秀的程序员
  2. 从底层结构开始学习FPGA(5)----移位寄存器
  3. 系统学习机器学习之特征工程(三)--多重共线性
  4. 阜阳的热带鱼水族店有哪些(照片)
  5. 千里马Android Framework-input系统专题blog目录集合
  6. Android获取移动网络信号强度
  7. HFSS初探日志(一):HFSS软件基本原理和重要参数
  8. 二狗子的志愿者故事20210121
  9. Kafka与Flink结合使用
  10. 云原生,炸裂!(文末有福利)