一 概述
二 代码示例
# x为输入值
def forward(self, x):
# 将输入x通过self.conv1进行卷积操作,得到卷积后的结果x。
x = self.conv1(x)
# 将卷积后的结果x通过self.bn1进行批量归一化操作,得到归一化后的结果x。
x = self.bn1(x)
# 将归一化后的结果x通过ReLU激活函数进行激活,得到激活后的结果x。
x = self.relu(x)
#重复上述步骤,对x进行多次卷积、归一化和激活操作。
x = self.conv2(x)
x = self.bn2(x)
x = self.relu(x)
# 将激活后的结果x通过self.block1进行某种块操作,得到块操作后的结果x。
x = self.block1(x)
x = self.block2(x)
x = self.block3(x)
x = self.conv3(x)
x = self.bn3(x)
x = self.relu(x)
# 将激活后的结果x通过自适应平均池化操作,将特征图的大小调整为(1, 1)。
x = F.adaptive_avg_pool2d(x, (1, 1))
# 将池化后的结果x进行展平操作,将其转换为一维向量。
# 因为全连接层需要接收一维向量作为输入,目的是能够对每个元素进行独立的处理,从而实现更复杂的模型和任务
# x.size(0)表示batchsize的值,而-1表示根据原tensor数据和batchsize自动分配列数
# 将池化后的多维张量转换为(batchsize, channels*x*y)的形状,即将(channels,x,y)拉直成一维向量
x = x.view(x.size(0), -1)
# 将展平后的结果x通过全连接层self.fc进行线性变换,得到最终的输出x
x = self.fc(x)
return x