深度学习基础:张量数据操作指南

深度学习基础:张量数据操作指南

d2l-zh 《动手学深度学习》:面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。 d2l-zh 项目地址: https://gitcode.com/gh_mirrors/d2/d2l-zh

张量(Tensor)是深度学习中最重要的数据结构之一,它为我们提供了高效存储和操作多维数据的能力。本文将全面介绍张量的基本概念、创建方法、常用操作以及内存管理技巧,帮助读者掌握深度学习中最基础的数据处理技能。

张量基础概念

张量可以理解为多维数组的泛化形式,它是标量、向量和矩阵的高维扩展:

  • 0维张量:标量(单个数字)
  • 1维张量:向量
  • 2维张量:矩阵
  • 3维及以上:高阶张量

在深度学习中,张量相比传统的NumPy数组有几个关键优势:

  1. GPU加速支持,大幅提升计算效率
  2. 内置自动微分功能,便于神经网络训练
  3. 针对深度学习优化的各种操作接口

创建张量

基础创建方法

我们可以使用多种方式创建张量:

# 创建连续整数张量
x = torch.arange(12)  # 0到11的一维张量

# 查看张量形状
print(x.shape)  # 输出: torch.Size([12])

# 获取元素总数
print(x.numel())  # 输出: 12

改变形状

张量的形状可以灵活改变,而不影响其存储的数据:

# 将1x12张量重塑为3x4矩阵
X = x.reshape(3, 4)

# 自动推断维度
X = x.reshape(-1, 4)  # 自动计算行数

特殊张量创建

深度学习经常需要初始化特定值的张量:

# 全零张量
zeros = torch.zeros(2, 3, 4)

# 全一张量
ones = torch.ones(2, 3, 4)

# 随机初始化张量(标准正态分布)
randn = torch.randn(3, 4)

# 从列表创建张量
custom = torch.tensor([[2,1,4,3], [1,2,3,4], [4,3,2,1]])

张量操作

元素级运算

张量支持丰富的数学运算,这些运算默认都是元素级的:

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])

# 基本运算
print(x + y)  # 加法
print(x - y)  # 减法  
print(x * y)  # 乘法
print(x / y)  # 除法
print(x ** y) # 幂运算

# 指数运算
print(torch.exp(x))

张量连接

我们可以将多个张量沿指定维度连接:

X = torch.arange(12, dtype=torch.float32).reshape(3,4)
Y = torch.tensor([[2,1,4,3], [1,2,3,4], [4,3,2,1]])

# 沿行连接(增加行数)
print(torch.cat((X, Y), dim=0))

# 沿列连接(增加列数)
print(torch.cat((X, Y), dim=1))

逻辑运算与聚合

# 逻辑比较
print(X == Y)

# 求和
print(X.sum())  # 所有元素求和

广播机制

广播机制允许不同形状的张量进行运算,系统会自动扩展较小的张量以匹配较大张量的形状:

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

# 自动广播为3x2矩阵进行运算
print(a + b)

广播规则:

  1. 从最后一个维度开始向前比较
  2. 维度大小相同或其中一个为1时可以广播
  3. 缺失的维度视为1

索引与切片

张量支持类似NumPy的索引和切片操作:

# 获取最后一个元素
print(X[-1])

# 获取第2和第3行
print(X[1:3])

# 修改特定元素
X[1, 2] = 9

# 修改多行
X[0:2, :] = 12

内存高效操作

深度学习模型通常需要高效利用内存,我们应尽量避免不必要的内存分配:

# 低效方式(新分配内存)
Y = Y + X

# 高效原地操作方式
Y[:] = Y + X
# 或
Y += X

对于TensorFlow,由于张量不可变,需要使用Variable:

Z = tf.Variable(tf.zeros_like(Y))
Z.assign(X + Y)  # 不会创建新内存

总结

张量操作是深度学习的基础,掌握这些核心技能将帮助你:

  1. 高效处理和转换数据
  2. 实现各种数学运算
  3. 优化内存使用
  4. 为后续构建复杂神经网络打下坚实基础

建议读者实际运行这些代码示例,通过实践加深理解。随着学习的深入,你会发现这些基础操作在构建和训练深度学习模型时无处不在。

d2l-zh 《动手学深度学习》:面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。 d2l-zh 项目地址: https://gitcode.com/gh_mirrors/d2/d2l-zh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郝钰程Kacey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值