PyTorch学习笔记-第一部分

本文是PyTorch学习笔记的第一部分,介绍了PyTorch的基础内容,包括Tensor的使用、自动微分原理,以及神经网络的构建。讲解了Variable类的核心功能,如何构建简单的神经网络,以及在CIFAR-10数据集上的应用。
摘要由CSDN通过智能技术生成

PyTorch学习笔记

张中逸
第一部分:PyTorch入门

基础内容

准备

import torch as t

初始化

x = t.Tensor(5,3) #只是初始化
x = t.rand(5,3)   #生成(0,1)上随机数

Torch.sizetuple对象的子类,支持所有tuple类的操作

基本运算(加法)

#加法#
x = t.rand(5,3)
y = t.rand(5,3)
#表达方式1:z = x + y#
#表达方式2:z = t.add(x,y)#
#表达方式3:z = t.rand(5,3);z = t.add(x,y,out = z)#
#---------------#
#自增#
x.add_(1) #所有元素加1#

下划线

x = t.rand(5,3)
y = t.rand(5,3)
#y本身不变的表达,返回新的Tensor:y = t.add(x)#
#y本身改变的表达,等价于y = y + x:y = t.add_(x)#

选取

print(x[:,1]) #打印第一列,从0开始数#

Tensor与numpy转换

Tensor不支持的操作可以先转换为numpy再转回Tensor

numpy是一种数组表示

两者共享内存(一起改变),转换速度快

#Tensor--->numpy#
a = t.ones(5)
b = a.numpy()
#numpy--->Tensor#
import numpy as np
a = np.ones(5)
b = t.from_numpy(a)

CUDA转换

#转换为GPU的Tensor,享受加速#
if t.cuda.is_available():
    x = x.cuda()
    y = y.cuda()

自动微分

autograd.VariableAutograd中的核心类,它简单封装了Tensor,并支持几乎所有Tensor的操作。Tensor在封装为Variable之后,可以调用它的.backward实现反向传播,自动计算所有的梯度。

Variable主要包含三个属性:

  • data:保存Variable包含的Tensor
  • grad:保存data对应的梯度,其本身也是一个Variable而不是Tensor
  • grad_fn:指向一个Function对象

使用Tensor新建一个Variable

from torch.autograd import Variable
import torch as t
x = Variable(t.ones(2,2), requires_grad = True) #产生一个2*2的全1矩阵
y = x.sum()                                     #这个类型还是一个Tensor
y.grad_fn                                       #求一个对象,之后再说
y.backward()                                    #求一次反向传播
x.grad                                          #求x的梯度,这里是对x的位置求导

这里关键在于这个backward()函数,可以得到一个通用的公式:在k.backward(p)作用后,x的梯度为 x . g r a d = p ∗ d k d x x.grad=p*\frac{dk}{dx} x.grad=pdxd

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值