pytorch tutorial : A 60 Minute Blitz

本文是对PyTorch官方教程《A 60 Minute Blitz》的总结,涵盖Tensor、自动求导机制、神经网络、损失函数、反向传播等内容。介绍了Tensor的创建、运算、与NumPy的交互,以及自动求导如何用于计算梯度。此外,文章还讨论了神经网络的构造,如卷积层、激活函数、线性层,以及损失函数的定义和反向传播的过程。数据处理方面,提到了PIL、OpenCV等库,以及torchvision对图像数据的支持。
摘要由CSDN通过智能技术生成

前言

pytorch用了一段时间,后来又不用了,所以重新捡起pytorch再学一遍。

本次的资料是来自官方教程的A 60 Minute Blitz,最基础的资料,本文是基于该资料的一些总结和概括。

Tensor


Tensor 在 pytorch可以看成是numpy.array的扩展,并且tensor可以在GPU上运行使用。

1.创建方法

  • torch.tensor(): 接受list, np.array
  • torch.*_like: 如torch.zero_like(x),和x同形
  • [tensor].new_[*]: 如x.new_ones(),和x同dtypedevice

2.大小
print(x.size())

3.运算

  • 直接使用运算符: +
  • torch.add(x,y, out = result): 可以指定返回的tensor,但是它必须已经被创建。
  • [tensor].add(y): 不改变tensor的值,返回和。
  • [tensor].add_(y): 将改变tensor的值,tensor值变为和。以_结尾的改变x的函数是in-place的。

4.切片
tensornumpy.arraylist拥有相同的切片规则。

5.resize
使用view函数,类似numpyreshape

    x = torch.randn(5,4)
    print(x.view(-1, 5))

6.tensor和array的关系

The Torch Tensor and NumPy array will share their underlying memory locations (if the Torch Tensor is on CPU), and changing one will change the other.

tensor和array 共享内存(如果tensor在cpu上),所以 改变一个影响另一个

  • tensor -> array:
    使用numpy()函数
x = torch.randn(5,4)
a = x.numpy()
print(a)
a += np.random.randn(5,4)
print(x) #这里x的值改变了
  • array -> tensor:
    使用from_numpy()函数
import numpy as np
a = np.array([3])
b = torch.from_numpy(a)
a = np.add(a, 1, out = a)
print(a)
print(b)

All the Tensors on the CPU except a CharTensor support converting to NumPy and back.
除CharTensor的其他CPU上的tensor都支持array互转。

7.x.item()
如果x是一个数字的tensor,x.item()可以得到一个python的数字。

8.Tensor on CUDA

  • 在创建函数中指定device=torch.device("cuda")直接创建CUDA上的Tensor
  • x = x.to(device=torch.device("cude"))使用to函数,注意不是in-place操作

9.其他操作
torch还包含很多其他的Tensor的操作。
如:

  • squeeze()去掉大小为1的维度
  • unsqueeze()在指定维度之后增加一个维度,大小为1
  • transpose(dim1, dim2)两个维度互换

AutoGrad 自动求导机制


自动求导机制是pytorch的核心模块。

AutoGrad in Tensor

Tensor(如x)在创建时指定requires_grad=True,会记录之后对它的计算。当完成从x到另一个Tensor(如z)的计算时,我们调用z.backward()方法,torch会沿着所有xz的计算路径,通过反向传播(链式求导法则)计算这之间所有requires_grad=TrueTensor的导数,并存储在x.grad变量里面。

注意:

  1. 得到的导数x.grad的大小和x相同。
  2. 调用.backward()方法时,参数为空时Tensor必须是标量(size=(1)),一般是loss。当Tensor是向量时,必须传入一个和Tensor大小相同的gradient(相当于链式求导的中间)。
x = torch.randn([
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值