Pytorch_第二章

本文介绍了PyTorch中创建和操作Tensor的基本方法,包括初始化Tensor、算术运算、索引切片、改变形状、线性代数操作以及自动求梯度的功能。此外,还讲解了如何将Numpy数组转换为Tensor,并探讨了不同运算对内存的影响。内容深入浅出,适合初学者掌握PyTorch的基础操作。
摘要由CSDN通过智能技术生成

Pytorch 数据操作


创建Tensor操作

  • 创建一个未初始化的Tensor
x=torch.empty(5,3)
  • 创建一个5x3的随机初始化的Tensor
x=torch.rand(5,3)
  • 创建一个5x3的long型全0的Tensor
x=torch.zeros(5,3,dtype=torch.long)
  • 使用list直接创建数据
x=torch.tensor([5.5,3])
  • 创建全是1的Tensor
x=x.new_ones(5,3,dtype=torch.float64)
  • 创建同类型的Tensor,随机初始化
x=torch.randn_like(x,dtype=torch.float)  
  • 通过shape或者size()来获取Tensor的形状
print(x.size())
print(x.shape)

还有一些其他操作,可见github中的数据操作的内容 。


算术操作

  • 加法形式一
y = torch.rand(5, 3)
print(x + y)
  • 加法形式二
print(torch.add(x, y))
  • 还可指定输出:
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
  • 加法形式三
# adds x to y
y.add_(x)
print(y)

索引切片

我们还可以使用类似NumPy的索引操作来访问 Tensor 的⼀部分,需要注意的是:索引出来的结果与原数据共享内存,也即修改⼀个,另⼀个会跟着修改。

y = x[0, :]
y += 1
print(y)
print(x[0, :]) # 源tensor也被改了了

image

改变形状

y=x.view(15)
y=x.view(-1,5)  #-1所指的维度可以根据其他维度的值推出来

view()返回的新tensor与源tensor共享内存


  • 使用clone可以实现深copy
x_cp=x.clone().view(15)
  • 使用item返回标量
x=torch.randn(1)
print(x)
print(x.item())

线性代数

pytorch提供了线性代数操作

广播操作

x = torch.arange(1, 3).view(1, 2)
print(x)
y = torch.arange(1, 4).view(3, 1)
print(y)
print(x + y)

输出:

tensor([[1, 2]])
tensor([[1],
[2],
[3]])
tensor([[2, 3],
[3, 4],
[4, 5]])

运算内存开销

y=y+x                 #y会开辟新的内存
y[:]=y+x              #y不会开辟新的内存空间
torch.add(x, y, out=y) #y不会开辟新的内存空间
y += x
y.add_(x)      #y不会开辟新的内存空间

Numpy数组转Tensor

import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)

自动求梯度

  • Tensor核心类
    • 激活梯度
    • 反向传播
    • 冻结梯度
    • Function函数的作用
    • .grad_fn根据Tensor是否运算而来,与Function产生联合

梯度

Tensor.grad提供了累积梯度,记得及时清零。
y.backward(),y必须是标量的tensor,我们不不允许张量量对张量求导,只允许标量对张量求导,求导结果是和⾃变量同形的张量。
如果我们想修改tensor的数据,但又不想被autograd记录,那么我们可以对tensor.data进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值