我们都知道,Pytorch加载数据的常规流程是先定义一个Dataset,然后使用DataLoader来成Batch地加载数据。当我们在Dataset中定义的__getitem__返回的数据是array或者tensor的话,Pytorch都会尽量地将数据转换为tensor并将数据叠起来添加一个batch_size维度。也就是实现类似torch.stack的效果。
参考资料: https://pytorch.org/docs/stable/data.html 我们都知道,Pytorch加载数据的常规流程是先定义一个Dataset,然后使用DataLoader来成Batch地加载数据。当我们在Dataset中定义的__getitem__返回的数据是array或者tensor的话,Pytorch都会尽量地将数据转换为tensor并将数据叠起来添加一...
def __init__(self,
set, batch_size=1, shuffle=False, sampler=None,
batch_sampler=None, num_workers=0, collate_fn=None,
pin_memory=False, ...
在深度学习
中
,我们会发现数据集通常会转载到
Data
Loader
中
,
data
loader
=
Data
Loader
(datesets, batch_size=64, shuffle=True)
当然这里的datesets可以指整个数据集,也可以是训练集,测试集等
#装载整个数据集
data
sets = {
'train':train_ds ,
'valid':valid_ds ,
'test': test_ds
data
Loader
= {
我们一般使用for循环来训练神经网络,在每次的迭代过程,从
Data
Loader
中
取出batchsize的数据,然后前向传播反向传播一次,更新参数一次
在
加载
batch数据的时候,
torch
创建一个可迭代的
Data
set对象(需要重写__getitem__()和__len__()两个方法),然后与
Data
Loader
一起使用;
Data
Loader
: 构造一个整数索引的采样器来获取
Data
set的数据创建
Data
set对象:
需要重写 getitem 方法和 len 方法。
前者通过提供索引返回数据,也就是提供
Py
torch
模型
定义
的方式
模型在深度学习
中
扮演着重要的角色,好的模型极大地促进了深度学习的发展进步,比如CNN的提出解决了图像、视频处理
中
的诸多问题,RNN/LSTM模型解决了序列数据处理的问题,GNN在图模型上发挥着重要的作用。当我们在向他人介绍一项深度学习工作的时候,对方可能首先要问的就是使用了哪些模型。因此,在Py
Torch
进阶操作的第一部分
中
,首先来学习Py
Torch
模型相关的内容。
在第一部分课程
中
,已经学习了模型
中
的“层“是如何
定义
的,以及基础的模型是如何构建的。这里来更为系统地学习PyTo
1.创建transform的
字典
1.输入为PIL的图像(array也行),转换为Tensor (0—255的[H,W,C] —> 0~1 的 [C,H,W])
2. compose将多个变换组合起来
data
_transforms = {
'train': transforms.Compose([
transforms.RandomResizedCrop(input_size),
transforms.RandomHorizontalFlip(),
动手学深度学习 PY
TORCH
版(DEMO)
(https://github.com/ShusenTang/Dive-into-DL-Py
Torch
)
PDF 制作by [Marcus Yang](https://github.com/chenyang1999)
1.tensor简介
在Py
Torch
中
,
torch
.Tensor是存储和变换数据的主要工具。
Tensor与Numpy的多维数组非常相似。
Tensor还提供了GPU计算和自动求梯度等更多功能,这些使Tensor更适合深度学习。
在构建
Data
Loader
时,需要传入参数
data
set,这里可以是自己自
定义
数据集类,比如上图my
Data
set
在
Data
Loader
送入
torch
中
进行训练时,会自动调用数据集类的__getitem__()方法
class my
Data
set(
Data
set):
def __init__(self, csv_file, txt_file, root_dir, other_file):
self.csv_
data
= pd.read_csv(csv_fi...
官方解释:
Data
loader
组合了
data
set & sampler,提供在数据上的 iterable
主要参数:
1、
data
set:这个
data
set一定要是
torch
.utils.
data
.
Data
set本身或继承自它的类
里面最主要的方法是 getitem(self, index) 用于根据index索引来取数据的
2、batch_size:每个batch批次要返回几条数据
3、shuffle:是否打乱数据,默认False
4、sampler:sample strategy,数据选取策
Py
torch
自
定义
Data
set1. 自
定义
加载
数据1.1. 第一种
Data
set class1.2. 第二种
torch
vision
1. 自
定义
加载
数据
在学习Py
torch
的教程时,
加载
数据许多时候都是直接调用
torch
vision.
data
sets里面集成的数据集,直接在线下载,然后使用
torch
.utils.
data
.
Data
Loader
进行
加载
。
那么,我们怎么使用我们自己的数据集...
py
torch
Data
set,
Data
Loader
产生自
定义
的训练数据1.
torch
.utils.
data
.
Data
set2.
torch
.utils.
data
.
Data
Loader
3. 使用
Data
set,
Data
Loader
产生自
定义
训练数据3.1 自
定义
Data
set
1.
torch
.utils.
data
.
Data
set
data
sets这是一个py
torch
定义
的
data
set的源码集合。下面是一个自
定义
Data
sets的基本框架,初始化放在__init__()
中
,其
中
__getitem__
整理一下看到的自
定义
数据读取的方法,较好的有一下三篇文章, 其实自
定义
的方法就是把现有数据集的train和test分别用 含有图像路径与label的list返回就好了,所以需要根据数据集随机应变。
所有图片都在一个文件夹1
之前刚开始用的时候,写
Data
loader
遇到不少坑。网...
在进行深度学习处理的时候,我们需要将数据输入到神经网络
中
进行训练,训练网络的学习能力,其实是根据一定的规则更新网络节点
中
的参数,而这个规则的来源就是依赖于数据与标签。我们需要将数据与标签相匹配,才能让网络进行训练,比如说网络学习到了一定的特征,而查阅此时的标签信息,比如说是车,那么网络就可以记住这样的特征表示的是车。这就要求我们输入的数据与数据标签是要对应的,在py
torch
中
,我们使用
torch
.utils.
data
类来实现。
函数的
中
文文档:
torch
.uutils.
data
https://py
torch
的
Data
Loader
主要是用来装载数据,就是给定已知的数据集,把数据集装载进
Data
Loaer,然后送入深度学习网络进行训练。先看一下它的声明吧。(官方声明,py
torch
1.10.0文档,参考资料1)
Data
Loader
(
data
set, batch_size=1, shuffle=False, sampler=None,
batch_sampler=None, num_workers=0, collate_fn=None,
pin_memor...
torch
.utils.
data
.
Data
Loader
主要是对数据进行batch的划分,除此之外,特别要注意的是输入进函数的数据一定得是可迭代的。如果是自定的数据集的话可以在
定义
类
中
用def__len__、def__getitem__
定义
。
使用
Data
Loader
的好处是,可以快速的迭代数据。
import
torch
import
torch
.utils.
data
as
Data
torch
.manual_seed(1) # reproducible
BATCH_SIZE = 5
可以使用
torch
.nn模块
中
的
torch
.nn.Conv2d函数来实现空洞卷积,其
中
dilation参数指定了空洞卷积的空洞大小。例如,可以使用以下代码实现一个空洞卷积层:
import
torch
.nn as nn
#
定义
一个空洞卷积层
dilated_conv = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, dilation=2)
# 输入数据
x =
torch
.randn(1, 3, 224, 224)
# 进行空洞卷积操作
out = dilated_conv(x)
注意,这里的in_channels和out_channels分别指定了输入和输出的通道数,kernel_size指定了卷积核的大小,dilation指定了空洞卷积的空洞大小。