在 PyTorch 中,torch.nn 和 torch.nn.functional 是两种不同形式的实现,分别以类和函数的形式提供神经网络层和损失函数。它们的主要区别如下:
1. 实现形式
- torch.nn(类形式)
- 定义方式:torch.nn 中的组件是以类的形式实现的。例如, torch.nn.Conv2d 是一个类,用于定义卷积层。
- 使用方式:需要先实例化对象,然后通过调用对象的 forward 方法(通常通过 () 操作符隐式调用)来执行操作。
import torch
import torch.nn as nn
定义一个卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
input_tensor = torch.randn(1, 3, 32, 32) # 输入张量
output_tensor = conv_layer(input_tensor) # 调用卷积层
- torch.nn.functional(函数形式)
定义方式:torch.nn.functional 中的组件是以函数的形式实现的。例如,torch.nn.functional.conv2d 是一个函数,用于执行卷积操作。
使用方式:直接调用函数,并传入输入张量和必要的参数。
import torch
import torch.nn.functional as F
input_tensor = torch.randn