问题描述
在使用 PyTorch 构建卷积神经网络时,当调用 torch.nn.Conv2d() 函数时可能会出现如下类型的报错:
TypeError: Conv2d() missing 1 required positional argument: ‘out_channels’
出错原因
这种类型的报错通常是由于使用函数时没有为 out_channels 这个参数传递参数值所导致的。在使用 PyTorch 中的 torch.nn.Conv2d() 函数时,必须传递以下参数:
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
其中,忽略默认参数后的前三个参数 in_channels、out_channels、kernel_size 都是必选参数,不可省略。而后面的参数可根据需要省略或改变默认值。
解决方案
要避免上述错误,解决方案很简单。只需提供 Conv2d() 函数缺少的必选参数 out_channels 的值即可。在构建卷积神经网络时,可以根据需要修改其余参数,但必须保证在 nn.Conv2d() 函数的调用过程中不缺少必选参数。
不妨来看一下以下示例:
import torch.nn as nn
# 构建一个简单的卷积神经网络模型
class ConvNet(nn.Module):
def __init__(self):
super(ConvNet, self).__init__()
self.conv1 = nn.Conv2d(3, 8, kernel_size=3, stride=1, padding=1)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.conv2 = nn.Conv2d(8, 16, kernel_size=3, stride=1, padding=1)
self.fc1 = nn.Linear(16*8*8, 512)
self.fc2 = nn.Linear(512, 10)
def forward(self, x):
x = self.conv1(x)
x = nn.functional.relu(x)
x = self.pool(x)
x = self.conv2(x)
x = nn.functional.relu(x)
x = self.pool(x)
x = x.view(-1, 16*8*8)
x = self.fc1(x)
x = nn.functional.relu(x)
x = self.fc2(x)
return x
在这个简单的卷积神经网络模型中,首先定义了一个叫做 ConvNet 的类。该模型有两个卷积层,一个全连接层和一个输出层,用于将输入图像分类到 10 个类别中。在定义卷积层时,nn.Conv2d() 函数的缺省值使用了 stride=1,padding=0 和 groups=1,而其他参数都指定了数值。虽然我们可以根据需要更改这些参数,但必须保证组合函数调用时不会缺少必选参数。
因此,在使用 PyTorch 构建深度学习神经网络时,提供必要的参数并遵循正确的语法和规范是非常重要的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyTorch报”TypeError: Conv2d() missing 1 required positional argument: ‘out_channels’ “的原因以及解决办法 - Python技术站