我正在读一些pytorch教程。下面是剩余块的定义。但是,在forward
方法中,每个函数句柄只接受一个参数out
,而在__init__
函数中,这些函数具有不同数量的输入参数:
# Residual Block
class ResidualBlock(nn.Module):
def __init__(self, in_channels, out_channels, stride=1, downsample=None):
super(ResidualBlock, self).__init__()
self.conv1 = conv3x3(in_channels, out_channels, stride)
self.bn1 = nn.BatchNorm2d(out_channels)
self.relu = nn.ReLU(inplace=True)
self.conv2 = conv3x3(out_channels, out_channels)
self.bn2 = nn.BatchNorm2d(out_channels)
self.downsample = downsample
def forward(self, x):
residual = x
out = self.conv1(x)
out = self.bn1(out)
out = self.relu(out)
out = self.conv2(out)
out = self.bn2(out)
if self.downsample:
residual = self.downsample(x)
out += residual
out = self.relu(out)
return out
有人知道这是怎么回事吗? 它是一个标准的python类继承特性还是pytorch特有的特性?你知道吗
您可以在类的构造函数(
__init__
函数)中定义网络体系结构的不同层。基本上,创建不同层的实例时,可以使用设置参数对其进行初始化。你知道吗例如,当您声明第一个卷积层
self.conv1
时,您将给出初始化该层所需的参数。在forward函数中,只需使用输入调用层即可获得相应的输出。例如,在out = self.conv2(out)
中,获取前一层的输出,并将其作为下一个self.conv2
层的输入。你知道吗请注意,在初始化过程中,您向层提供了将向该层提供何种类型/形状的输入的信息。例如,您告诉第一个卷积层您的输入中输入和输出通道的数量是多少。在forward方法中,您只需要传递输入,就是这样。你知道吗
您可以在init函数中定义层,这意味着参数。在forward函数中,您只输入需要使用init的预定义设置进行处理的数据。这个不管怎样使用传递给它的设置生成函数。那么这个函数可以在forward中使用,并且这个函数只接受一个参数。你知道吗
相关问题 更多 >
编程相关推荐