我正在使用 PyTorch 来实现基于骨架的动作识别的分类网络。该模型由三个卷积层和两个全连接层组成。这个基本模型在 NTU-RGB+D 数据集中给了我大约 70% 的准确率。我想了解更多关于批量归一化的知识,所以我为除最后一层之外的所有层添加了批量归一化。令我惊讶的是,评估准确率下降到了 60% 而不是提高,但训练准确率却从 80% 提高到了 90%。谁能说我做错了什么?或者添加批量标准化不需要提高准确性?
批量归一化模型
class BaseModelV0p2(nn.Module):
def __init__(self, num_person, num_joint, num_class, num_coords):
super().__init__()
self.name = 'BaseModelV0p2'
self.num_person = num_person
self.num_joint = num_joint
self.num_class = num_class
self.channels = num_coords
self.out_channel = [32, 64, 128]
self.loss = loss
self.metric = metric
self.bn_momentum = 0.01
self.bn_cv1 = nn.BatchNorm2d(self.out_channel[0], momentum=self.bn_momentum)
self.conv1 = nn.Sequential(nn.Conv2d(in_channels=self.channels, out_channels=self.out_channel[0],
kernel_size=3, stride=1, padding=1),
self.bn_cv1,
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2))
self.bn_cv2 = nn.BatchNorm2d(self.out_channel[1], momentum=self.bn_momentum)
self.conv2 = nn.Sequential(nn.Conv2d(in_channels=self.out_channel[0], out_channels=self.out_channel[1],
kernel_size=3, stride=1, padding=1),
self.bn_cv2,
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, …Run Code Online (Sandbox Code Playgroud)