Pytorch中torch.nn.conv2d和torch.nn.functional.conv2d的区别

本文探讨了Pytorch中torch.nn.conv2d与torch.nn.functional.conv2d的区别,包括它们的实现方式、调用方式及在nn.Sequential中的使用差异。nn.Conv2d是一个类,用于构建模型,而nn.functional.conv2d是纯函数,适用于直接操作。nn模块的组件可以用于构建复杂的网络结构,而functional模块更适合单独操作。在使用Dropout时,nn模块的灵活性更优,因为其会根据model.eval()自动调整状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你是否和我有同样疑惑,pytorch中怎么会有卷积、激活、池化等操作,虽然不在同一个包下面,那他们的区别究竟是什么,今天我们就来捋一捋这个问题。

区别一

正如我们知道的这些看似相同的卷积、激活、池化等操作,分别在不同的包下面—— torch.nn.xxx 和 torch.nn.functional.xxx包,那么他的作用和完成的方式以及调用的方式当然也不一样。

首先我们来看一下pytorch中文文档
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201116190922981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGV在这里插入图片描述

细心的朋友已经发现了,nn.Conv2d 是一个类,而 nn.functional.conv2d更像是一个函数。具体地说就是:

  • nn.Conv2d可以狭隘的理解为Class类,需要继承自nn.Module nn.Module 类
  • nn.functional 中的函数更像是纯函数,由 def function(input,) 定义

区别二

  • 调用torch.nn.xxx 时要先在里面传入超参数,然后再将数据以函数调用的方式传入 nn.xxx
  • torch.nn.functional需要同时传入数据和额外参数
# torch.nn——需要先设定超参数in_channels、out_channels、kernel_size等
inputs =  torch.randn(64, 3, 512, 512)
self.conv1 = nn.Conv2d(in_channels=64, out_channels=128 kernel_size=5, strides=2, padding=1)
outputs = self.conv(inputs)

# torch.nn.functional——需要同时传入inputs和 weight,bias等参数
inputs =  torch.randn(64, 3, 512, 512)
weight = torch.randn(64, 3, 3, 3)
bias = torch.randn(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值