动手深度学习-2.1 数据操作

深度学习使用的主要数据结构是张量, 其支持GPU加速和自动微分。本章介绍张量的操作如下:基本数学运算、广播机制、索引和切片、节省内存、转换其他Python对象。

2.1.1 入门

  • 导入Torch库
import torch
  • 使用torch.arange()创建一个行向量x,包含从0开始的12个整数。
x = torch.arange(12)
x
  • 使用张量的shape属性访问张量的形状
x.shape
  • 使用numel()函数获取张量中元素的总数
x.numel()
  • 使用reshape()函数改变张量的形状
X = x.reshape(3, 4)
X
  • 使用torch.zeros()函数创建指定形状的元素值都为0的张量
torch.zeros((2, 3, 4))
  • 使用torch.randn()函数创建指定形状的元素值服从标准正态分布的张量
torch.randn(3, 4)
  • 使用torch.tensor()函数根据指定列表创建张量
torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])

2.2.2 运算符

  • 按元素运算(+、-、*、/、**、exp()等一元运算符)
x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y
torch.exp(x)
  • 矩阵运算
  • 使用torch.cat()将张量连接在一起
X = torch.arange(12, dtype = torch.float32).reshape((3, 4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim = 0), torch.cat((X, Y), dim = 1)
  • 使用逻辑运算符==构建二元张量
X == Y
  • 使用sum()函数对张量中的所有元素进行求和
X.sum()

2.2.3 广播机制

使用广播机制在形状不同的两个张量上执行按元素操作

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b
a + b

2.2.4 索引和切片

  • 使用索引和切片读取张量中的元素
X[-1], X[1 : 3]
  • 使用索引和切片写入张量中的元素
X[1, 2] = 9
X

2.2.5 节省内存

  • 使用id()函数显示变量的确切地址
before = id(Y)
Y = X + Y
id(Y) = before
  • 使用切片表示法[:]执行原地操作
Z = torch.zeros_like(Y)
print('id(Z)', id(Z))
Z[:] = X + Y
print('id(Z): ', id(Z))
  • 使用X[:] = X + Y或X += Y来减少操作的内存开销
before = id(X)
X += Y
id(X) == before

2.2.6 转换为其他Python对象

  • 使用numpy()函数将torch张量转换为numpy数组
  • 使用torch.tensor()函数将numpy数组转换为torch张量
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
  • 使用.item()函数将torch张量转换为python标量
a = torch.tensor([3.5])
a, a.item(), float(a), int(a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值