Почему моя реализация VGG-19 не работает? - PullRequest
0 голосов
/ 21 сентября 2019

Мне нужно внедрить VGG-19 вручную, чтобы обеспечить максимальную точность при тестировании данных CIFAR-10.

Я прочитал статью о VGGNet и внедрил сеть VGG-19, но у меня есть точностьскорость 10% в наборе тестовых данных ... Я пытался изменить размер партии, скорость обучения без улучшений.

class MyClassifier(nn.Module):
  def __init__(self):
        super(MyClassifier, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=1, padding=1)
        self.conv12 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1)

        self.conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1)
        self.conv22 = nn.Conv2d(in_channels=128, out_channels=128, kernel_size=3, stride=1, padding=1)

        self.conv3 = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=1, padding=1)
        self.conv32 = nn.Conv2d(in_channels=256, out_channels=256, kernel_size=3, stride=1, padding=1)

        self.conv4 = nn.Conv2d(in_channels=256, out_channels=512, kernel_size=3, stride=1, padding=1)
        self.conv42 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, stride=1, padding=1)


        self.relu = nn.ReLU()
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)

        self.Dropout = nn.Dropout(p=0.5)
        self.fc1 = nn.Linear(in_features=512*1*1, out_features=4096)
        self.fc2 = nn.Linear(in_features=4096, out_features=4096)
        self.fc3 = nn.Linear(in_features=4096, out_features=output_dim)

  def forward(self, x):
      x = self.relu(self.conv1(x))
      x = self.pool(self.relu(self.conv12(x)))

      x = self.relu(self.conv2(x))
      x = self.pool(self.relu(self.conv22(x)))

      x = self.relu(self.conv3(x))
      x = self.pool(self.relu(self.conv32(x)))

      x = self.relu(self.conv4(x))
      x = self.relu(self.conv42(x))
      x = self.relu(self.conv42(x))
      x = self.pool(self.relu(self.conv42(x)))

      x = self.relu(self.conv42(x))
      x = self.relu(self.conv42(x))
      x = self.relu(self.conv42(x))
      x = self.pool(self.relu(self.conv42(x)))

      x = x.view(-1, 512*1*1)
      x = self.Dropout(self.relu(self.fc1(x)))
      x = self.Dropout(self.relu(self.fc2(x)))
      outputs = self.fc3(x)
      return outputs

Вот мои результаты:

[epoch:0, iteration:2000] train loss : 2.5708 train accuracy : 0.0000
[epoch:0, iteration:4000] train loss : 2.4595 train accuracy : 0.0000
[epoch:0, iteration:6000] train loss : 2.2051 train accuracy : 0.0000
[epoch:0, iteration:8000] train loss : 2.4449 train accuracy : 0.0000
[epoch:0, iteration:10000] train loss : 2.3113 train accuracy : 0.2500
[epoch:0, iteration:12000] train loss : 2.3602 train accuracy : 0.0000
[epoch:0, iteration:12500] test_loss : 2.3092 test accuracy : 0.1000
checkpoint is saved !

Моя точность теста0,1 (10%) в эпоху: 0, но остается 0,1 даже после 10 эпох.Я верил, что смогу достичь по крайней мере 0,8 (80%) с кодом VGG-19.Видите ли вы какие-либо проблемы с кодом или это что-то еще?

1 Ответ

0 голосов
/ 22 сентября 2019

Если бы мне пришлось угадывать, я бы подумал, что это как-то связано с вашей функцией потери во время тренировки.Вы используете кросс-энтропийную потерю?Если вы используете NLLLoss, вам нужен слой журнала Softmax в конце вашей сети.

...