Pytorch学习笔记-第二章

Pytorch学习笔记

  • 第二章快速入门
    • Tensor
      • 初始化
      • Tensor之间运算
      • 索引选取
      • 复制
    • autograd
    • NN
    • 小试牛刀

记录一下个人学习和使用Pytorch中的一些问题。强烈推荐 《深度学习框架PyTorch:入门与实战》.写的非常好而且作者也十分用心,大家都可以看一看,本文记录按照该书学习Pytorch时遇到的一些问题。

第二章快速入门

Tensor

Tensor是PyTorch中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)以及更高维的数组。Tensor和Numpy的ndarrays类似,但Tensor可以使用GPU进行加速。

初始化

可以生成指定shape的空对象
可以通过已有的数组对象(多维list,ndarrays),尤其是numpy
或者随机初始化

# 构建 5x3 矩阵,只是分配了空间,未初始化
x = pytorch.Tensor(5, 3)
#通过已有对象
x = pytorch.Tensor([[1,2],[3,4]])
#numpy之间互相转换,但是这样生成的对象是共享内存的
b = a.numpy()
b = pytorch.from_numpy(a)
# 使用[0,1]均匀分布随机初始化二维数组
x = pytorch.rand(5, 3)

Tensor之间运算

加法:可以直接+号或者add函数(同大小,否则报错)

pytorch.add(x, y, out=result) # 输入到result
#带_后缀函数改变原值,类比pandas里inplace =True
y.add(x) # 普通加法,不改变y的内容
y.add_(x) # inplace 加法,y变了

索引选取

如果你想获取某一个元素的值,可以使用scalar.item。 直接tensor[idx]得到的还是一个tensor: 一个0-dim 的tensor,一般称为scalar.(注意区分scalar和tensor)

Pytorch学习笔记-第二章_第1张图片

复制

需要注意的是,pytorch.tensor()或者tensor.clone()总是会进行数据拷贝,新tensor和原来的数据不再共享内存。所以如果你想共享内存的话,建议使用torch.from_numpy()或者tensor.detach()来新建一个tensor, 二者共享内存。

autograd

在Tensor上的所有操作,autograd都能为它们自动提供微分,避免了手动计算导数的复杂过程。

# 为tensor设置 requires_grad 标识,代表着需要求导数
# pytorch 会自动调用autograd 记录操作
x = t.ones(2, 2, requires_grad=True)

# 上一步等价于
# x = t.ones(2,2)
# x.requires_grad = True

如果设置了y是x的函数,调用y的bp函数,就可以计算x的梯度,但是是累加之前梯度,需要清零。
Pytorch学习笔记-第二章_第2张图片
清零代码为

x.grad.data.zero_()

NN

  1. 构造函数定义网络架构
  2. 传播函数
  3. 损失函数
  4. 优化器

Pytorch学习笔记-第二章_第3张图片

小试牛刀

对于常用的数据集,PyTorch也提供了封装好的接口供用户快速调用,这些数据集主要保存在torchvison中。torchvision实现了常用的图像数据加载功能,例如Imagenet、CIFAR10、MNIST等,以及常用的数据转换操作,这极大地方便了数据加载,并且代码具有可重用性。
1.数据转成dataloader
2.定义网络,损失,优化器
3.训练模型

你可能感兴趣的:(DL,深度学习)