1. PyTorch入门:为什么选择这个框架
第一次接触PyTorch时,我被它的动态计算图特性所吸引。与静态图框架不同,PyTorch允许我们在运行时修改计算流程,这对于调试和研究型工作来说简直是福音。记得当时在调试一个复杂的神经网络时,能够像普通Python代码一样使用pdb调试器单步执行,这种体验彻底改变了我对深度学习框架的认知。
PyTorch的核心设计哲学是"Python优先",这使得它的API对于Python开发者来说异常友好。你不需要学习一套新的编程范式,所有操作都遵循Python的习惯用法。比如创建张量就像初始化一个NumPy数组一样简单:
python复制import torch
x = torch.tensor([1.0, 2.0, 3.0])
这种设计大大降低了学习曲线,特别是对于已经熟悉Python科学计算生态的数据科学家来说。我在教学过程中发现,学生从NumPy过渡到PyTorch通常只需要几个小时就能掌握基本操作。
提示:PyTorch与NumPy的相似性是有意为之的设计。当你遇到PyTorch操作时,可以先想想NumPy中对应的操作是什么,这能帮助你快速理解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 张量操作:PyTorch的核心数据结构
2.1 张量的创建与基本属性
张量(Tensor)是PyTorch中最基本的数据结构,可以看作是多维数组的扩展。理解张量是掌握PyTorch的第一步。创建张量有多种方式,每种方式适用于不同场景:
python复制# 从Python列表创建
data = [[1, 2], [3, 4]]
x = torch.tensor(data)
# 创建特定形状的全0张量
zeros = torch.zeros(2, 3) # 2行3列
# 创建随机初始化的张量
rand_tensor = torch.rand(4, 4) # 4x4矩阵,值在[0,1)均匀分布
# 从NumPy数组创建
import numpy as np
np_array = np.array([1, 2, 3])
torch_tensor = torch.from_numpy(np_array)
张量有几个关键属性需要特别关注:
shape:张量的维度信息,相当于NumPy中的shapedtype:数据类型,如torch.float32、torch.int64等device:张量所在的设备(CPU/GPU)
我在实际项目中经常遇到的一个坑是数据类型不匹配。比如:
python复制a = torch.tensor([1, 2, 3]) # 默认是torch.int64
b = torch.tensor([1., 2., 3.]) # torch.float32
# 下面这行会报错
# c = a + b
解决方法很简单,统一数据类型即可:
python复制a = a.float() # 转换为float32
c = a + b # 现在可以正常运算
2.2 张量的基本运算
PyTorch支持丰富的张量运算,这些运算构成了深度学习模型的基础。基本的数学运算包括:
python复制x = torch.tensor([1., 2., 3.])
y = torch.tensor([4., 5., 6.])
# 逐元素加法
z = x + y # 等价于torch.add(x, y)
# 逐元素乘法
w = x * y # 等价于torch.mul(x, y)
# 矩阵乘法
mat1 = torch.randn(2, 3)
mat2 = torch.randn(3, 4)
result = torch.matmul(mat1, mat2) # 2x4矩阵
广
