第0.1天 pytorch的使用(1)

这一节课主要讲了pytorch。
百度百科上的说明是

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。
2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络。

简单来说就是

  • 可以调用GPU来加速计算(妈妈再也不用担心GPU只能打游戏了)

  • 网络结构随便堆,只要合理,梯度计算不用自己担心请添加图片描述
    上面是老师上课时的PPT里面的图,整个神经网络的训练部分可以分成三个部分,即

  • Define Function

  • Define Loss Function

  • Define Optimization Function
    也就是

  • 怎么定义算的方法

  • 怎么定义算得好

  • 怎么改进算的方法
    请添加图片描述
    当模型完成训练之后一般要进行Validation,也就是让模型看自己手里已经有答案的问题,以此来看自己的模型的效果,然后又训练,又看,来个1000次,这就是炼丹过程
    当你觉得自己的丹炼得差不多了,可以看一下最后的效果了,就是Testing的过程,其实可以直接把数据分成三个部分,即Trainin data,Validation data与Testing data,在LHY老师的代码里面就是这样写的

Dataset & Dataloader

由于在训练的过程中数据的加入是必不可少的,因此Pytorch中专门为数据设计的东西:Dataset & Dataloader。
Dataset负责配合Dataloader,相当于数据的来源,而Dataloader主要负责了组成Batch,Batch这个东西在训练的过程中比较重要,相当于原来1000个数据要训练1000次,但如果使用size为10的Batch则只需要搞100次了,而在计算Batch的过程中又可以使用GPU的并行计算能力,时间上大大加快。
一般Dataset定义形式如下图所示

class COVID19Dataset(Dataset):
	# 在这里进行数据的预处理,比如文件读取,类型转化
    def __init__(self, x, y=None):
        self.x = torch.FloatTensor(x)
    # 在这里进行数据的返回,此时返回的数据就是组成batch的东西了
    def __getitem__(self, idx):
        return self.x[idx], self.y[idx]
    # 在这里返回整个数据的长度
    def __len__(self):
        return len(self.x)

其实这三个方法都是python的魔法方法

class test:
    def __init__(self):
        print("hello world init function")
    def __getitem__(self,idx):
        print(f"{idx} item return")
    def __len__(self):
        return 100
mytest=test()
mytest[1]
len(mytest)

返回

hello world init function
1 item return
100

然后就是主要的Dataloader了
Dataloader在官方文档中介绍如下:

DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,
           batch_sampler=None, num_workers=0, collate_fn=None,
           pin_memory=False, drop_last=False, timeout=0,
           worker_init_fn=None, *, prefetch_factor=2,
           persistent_workers=False)

官方的说明已经比较详细了,主要有几个要注意的地方

  • 对于常用的DataLoader来说数据的产生有两个阶段,即产生index,然后用collate_fn组装
  • 第一个阶段主要是由shuffle,sampler,batch_sampler,batch_size四个参数指定,一般是使用第一个参数
  • 同时batch_sampler默认是由batch_size,shffle,drop_last自动生成的,其基础还是sampler
  • drop_last指定是否丢弃最后一个不完整的batch
  • pin_memory指定是否使用pined_memory,作用就是加快计算,具体的原理可以参考官方文档
  • num_workers和多进程有关,作用也是提速,具体也可以看官方文档(最详细)

关于pytorch Tensor的一些操作

tensor是pytorch中比较常见的数据形式,一般只要你使用pytorch总会和tensor打交道
tensor在百度翻译中是张量的意思,因为在pytorch中进行神经网络的训练的数据都不会只有二维,明显矩阵的维度就不够用了,因此出现张量的概念,张量可以理解为可以扩展维度的矩阵,如下图所示(也是老师ppt里面的东西~~)
请添加图片描述
对于tensor的操作主要可以分成几个类别:

  • 估计维度
a=torch.tensor([1,2,3,4])
print(a.size())
print(a.shape)
print(a.dim())
  • 生成
a=torch.tensor([1.0,2,3,4],dtype=torch.int32)
b=torch.Tensor([1,2,3,4])
a=torch.from_numpy(numpy.array([1,2,3,4]))
a=torch.ones(1,2)
a=torch.zeros(1,2)
a=torch.linspace(1,10,10)

在生成里要注意 tensor是可以指定dtype,而Tensor不可以指定,dtype=float32,

  • 常用操作(±*/,sum,mean,cat,mask,max,Squeeze,unSqueeze,review,reshape,permute,transpose)
    其中要注意的是permuteview,transpose,这三个函数都是进行维度转化,但有一点区别,view比较像是填东西,即会将数据从第一个位置到最后一个位置开始填满开头,无论形状如何,类似于水,而permute和transpose则像是从不同的角度来看一个tensor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值