PyTorch系列(一):1.快速入门

1. Tensor

from __future__ import print_function
import torch as t

x = t.Tensor(5,3) #构建5*3矩阵,只是分配了空间,未初始化
x = rand(5,3) #使用[0,1]均匀分布随机初始化二维数组
print(x.size()) #查看x的形状
# Print: torch.Size([5,3])

print(x.size()[0]) #查看x的行数
# torch.Size是tuple对象的子类,因此它支持tuple的所有操作,如x.size()[0]
print(x.size(1)) #查看x的列数

# 加法计算
y = t.rand(5,3)

#第一种加法
x + y 
#第二种加法
t.add(x,y) 
#第三种加法 指定加法结果的输出目标为result
result = t.Tensor(5,3) #预先分配空间
t.add(x,y,out=result) #输入到result

# 加法计算
# 第一种加法,不改变y的内容
y.add(x) #普通加法
#第二种加法
y.add_(x) #inplace加法,y改变了

Tensor和numpy的数组间的互操作非常容易且快速。Tensor不支持的操作,可以先转为numpy数组处理,之后再转回Tensor。

a = t.ones(5)
# Out: tensor([1., 1., 1., 1., 1.])

b = a.numpy() # Tensor -> Numpy
# Out: array([1., 1., 1., 1., 1.], dtype=float32)


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

Tensor和numpy对象共享内存,所以他们之间的转换很快,而且几乎不会消耗资源。这就意味着,如果其中一个变了,另外一个也会随之改变。

b.add_(1) #以_结束的函数会修改自身的值
print(a)
print(b) # Tensor和Numpy共享内存
# Out: [2. 2. 2. 2. 2.]
# Out: tensor([2., 2., 2., 2., 2.])

Tensor可通过.cuda方法转为GPU的Tensor,从而享受GPU带来的加速运算。

2.Autograd:自动微分

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

Variable主要包含三个属性:

  • data:保存variable所包含的tensor
  • grad:保存data对应的梯度,grad也是variable,而不是tensor,它与data形状一致。
  • grad_fn: 指向一个Function,记录tensor的操作历史,即它是什么操作的输出,用来构建计算图。如果某一个变量是由用户创建,则它为叶子节点,对应的grad_fn等于None。

Variable的构造函数需要传入tensor,同时有两个可选参数:

  • requires_grad (bool)&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值