pytorch函数使用规律-不必再死记硬背

文章目录

pytorch 官方文档链接https://docs.pytorch.org/docs/stable/index.html

你现在困惑的核心是PyTorch里同一个功能(比如交叉熵损失)会出现在不同模块下(nnnn.functionaltorch),不知道该选哪个、也不清楚背后的规律,不用死记硬背是关键。

其实PyTorch的函数/类命名和组织是有清晰规律的,并不是杂乱无章的,我先帮你拆解这个逻辑:

一、先理清PyTorch核心模块的分工

PyTorch把功能分成了几个核心层级,不同层级的定位完全不同:

模块/命名空间 定位(核心规律) 典型例子 使用场景
torch.xxx 基础张量操作、数学运算(无框架依赖) torch.logtorch.mean 纯张量计算、非神经网络专用的基础操作
torch.nn.XXX 神经网络层/损失(带可训练参数) nn.CrossEntropyLoss 构建网络、需要保存参数/状态时
torch.nn.functional.xxx 神经网络功能函数(无状态、纯计算) F.cross_entropy 临时计算、不需要保存参数时

二、逐个解答你的疑问

1. torch.log vs 神经网络相关函数

torch.log 属于基础数学运算 ,是PyTorch对张量的基础操作(类似numpy的np.log),不管是不是做深度学习,只要你想对张量取对数,都用它。

比如:

python 复制代码
import torch
x = torch.tensor([1.0, 2.0, 3.0])
print(torch.log(x))  # 输出: tensor([0.0000, 0.6931, 1.0986])

它和nn模块的函数没有冲突,是"基础工具"和"深度学习专用工具"的区别。

2. nn.CrossEntropyLoss(类) vs F.cross_entropy(函数)

这两个功能完全等价(计算的是同一个交叉熵损失),核心区别是"类"和"函数"的使用方式:

python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

# 模拟输入:模型输出(logits)和标签
logits = torch.randn(2, 3)  # 2个样本,3个类别
labels = torch.tensor([0, 2])

# 方式1:使用nn模块的类(需要先实例化)
criterion = nn.CrossEntropyLoss()  # 实例化(可传入参数如weight、reduction)
loss1 = criterion(logits, labels)

# 方式2:使用nn.functional的函数(直接调用)
loss2 = F.cross_entropy(logits, labels)

print(loss1)  # tensor(1.2345)(示例值)
print(loss2)  # 和loss1完全相等

选择规律

  • nn.CrossEntropyLoss(类):当你需要把损失函数作为"网络一部分"、需要重复使用,或需要设置可复用的参数(比如类别权重weight)时(比如在训练循环里反复调用)。
  • F.cross_entropy(函数):当你只是临时计算一次损失,或在自定义层里临时用一下,不需要保存状态时。

三、不用死记硬背的通用规律

  1. 先看需求类型

    • 如果是纯张量计算(加减乘除、对数、矩阵乘法)→ 找torch.xxx
    • 如果是神经网络相关(层、损失、激活)→ 先考虑nn(类)或nn.functional(函数)。
  2. 类 vs 函数的选择

    • 带"可训练参数"的(比如卷积层nn.Conv2d、线性层nn.Linear)→ 必须用nn的类(因为要保存权重参数);
    • 无参数的(比如ReLU、交叉熵损失、池化)→ 用nn类或nn.functional函数都可以,习惯问题(工程上nn类更常用,因为和nn.Module结合更自然)。
  3. 参数怎么查

    不用记参数!PyTorch官方文档是最好的工具:

总结

  1. PyTorch函数分三层:torch.xxx(基础张量运算)、nn.XXX(带状态/参数的神经网络类)、nn.functional.xxx(无状态的神经网络函数);
  2. 同一功能的"类"和"函数"(如CrossEntropyLoss)功能等价,选类用于复用/带状态,选函数用于临时计算;
  3. 不用死记参数和位置,优先根据需求类型找模块,参数查官方文档即可。

核心是理解"模块分工",而不是死记硬背函数名,用多了之后常用的函数自然就熟悉了。

相关推荐
rjc_lihui1 小时前
LightGBM 从入门到精通 (来自deepseek)
python
yohalaser2 小时前
IV检测精准落地:曜华激光测试仪为光伏降本提效赋能
大数据·人工智能·曜华激光·光伏组件生产线
YUISOK2 小时前
如何使用uiautomator2+Weditor 可视化查看一个app组件的vm树
python·软件工程
top_designer2 小时前
手绘贴图画断手?“AI 炼金术”3分钟量产风格化材质
人工智能·游戏·3d·材质·设计师·游戏策划·游戏美术
Hcoco_me2 小时前
大模型面试题88:cuda core的数量 与 开发算子中实际使用的线程 关系是什么?过量线程会发生什么情况?
人工智能·深度学习·机器学习·chatgpt·职场和发展·机器人
不会写代码0002 小时前
Flutter 框架跨平台鸿蒙开发 - 免费英语口语评测:AI智能发音纠正
人工智能·flutter·华为·harmonyos
Pyeako2 小时前
opencv计算机视觉--图形旋转&图形可视化&均衡化
人工智能·python·opencv·计算机视觉·图形旋转·图形可视化·均衡化
@我不是大鹏2 小时前
3、Spring AI Alibaba(SAA)零基础速通实战之Ollama私有化部署和对接本地大模型
数据库·人工智能·spring
人工智能AI技术2 小时前
【Agent从入门到实践】28 开发第一个Agent——开发准备:环境搭建(Python、依赖库、大模型API密钥)
人工智能·python