1. self.features = nn.Sequential() :精简模块代码,提高复用。放入conv层代码或者全连接层代码。
2.分类层classifier:
Dropout层:nn.Dropout(p=0.5)-》随机损失一半权重参数
全连接层:nn.Linear(128 * 6 * 6, 2048),-》输入128通道的6*6图像,连接层节点个数为2048个
ReL激活层: nn.ReLU(inplace=True),-》减少计算 量,防止梯度消失。
Dropout层:nn.Dropout(p=0.5)-》随机损失一半权重参数
全连接层:nn.Linear(2048, 2048),,-》输入2048个参数,连接层节点个数为2048个
ReL激活层: nn.ReLU(inplace=True),-》减少计算 量,防止梯度消失。
全连接层:nn.Linear(2048, num_classes),,,-》输入2048个参数,连接层节点个数为分类个数。
3.前向传播函数:def forward(self, x):
调用卷积模型:x = self.features(x)
将卷积层得到的参数转成一维向量:x = torch.flatten(x, start_dim=1)
传入全连接层:x = self.classifier(x)
4.权重初始化:
def _initialize_weights(self):
for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
if m.bias is not None:
nn.init.constant_(m.bias, 0)
elif isinstance(m, nn.Linear):