第一点:
nn.Conv2d 是一个类,而 nn.functional.conv2d更像是一个函数。具体地说就是:
- nn.Conv2d可以狭隘的理解为Class类,需要继承自nn.Module nn.Module 类,具体代码查看
https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv2d
- 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(64)
outputs = nn.functinoal.conv2d(inputs, weight, bias, padding=1)
参考文章:
https://blog.csdn.net/weixin_45561795/article/details/109727240?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3