Почему моя программа CNN не становится точнее после того, как я добавляю исключение?

Я использую CNN для идентификации изображений в наборе данных CiFar10, и до добавления исключения точность cnn достигала 58%, но после его добавления она упала до 52%. Может быть, сеть не переоснащается? потому что я сомневаюсь, что это так. После добавления еще двух отказов точность выросла до 55%, но я все еще не понимаю, почему она вообще упала. Вот мой код:

class Net(nn.Module):
def __init__(self):
    super(Net, self).__init__()
    self.conv1 = nn.Conv2d(3, 12, 3, padding=1)
    self.pool = nn.MaxPool2d(2, 2)
    self.conv2 = nn.Conv2d(12, 24, 3, padding=1)
    self.conv3 = nn.Conv2d(24, 48, 3, padding=1)
    self.conv4 = nn.Conv2d(48, 48, 3, padding=1)
    self.dropout1 = nn.Dropout(p=0.2)
    self.dropout2 = nn.Dropout(p=0.2)
    self.dropout3 = nn.Dropout(p=0.3)
    self.fc1 = nn.Linear(48 * 2 * 2, 120)
    self.fc2 = nn.Linear(120, 84)
    self.fc3 = nn.Linear(84, 10)


def forward(self, x):
    x = self.pool(self.dropout1(F.relu(self.conv1(x))))
    x = self.pool(self.dropout2(F.relu(self.conv2(x))))
    x = self.pool(self.dropout3(F.relu(self.conv3(x))))
    x = self.pool(F.relu(self.conv4(x)))
    x = x.view(-1, 48 * 2 * 2)
    x = F.relu(self.fc1(x))
    x = F.relu(self.fc2(x))
    x = self.fc3(x)
    return x
# pytorch dropout cnn
Источник
  • 0
    Попробуйте построить график потерь, чтобы проверить, есть ли переоснащение, поскольку отсев помогает только в случае переобучения.
Codelisting
за 0 против

Вам также нужно быть осторожным при сравнении прогонов, если вы тренируетесь и инициализируете с нуля. Инициализация случайного веса может иногда приводить к наблюдаемым вами вариациям, особенно если другие гиперпараметры (например, скорость обучения, размер пакета и т. Д.) Еще не оптимизированы. Даже в этом случае тасование пакетов может вызвать отклонения. Вы должны установить случайное начальное число и / или сохранить параметры веса при отладке всего этого.

  • 0
    Как я могу установить веса, чтобы они не были случайными при их инициализации? извините, если это глупый вопрос, я новичок в PyTorch, как вы можете сказать.
  • 0
    Не глупый вопрос, возможно, я не совсем понял. Вы определенно хотите / вам нужны случайные веса, но для отладки от запуска к запуску вы хотите, чтобы эти случайные веса были повторяемыми. Некоторые случайные вещи, которые вы можете просто захотеть смягчить, например, пусть перемешивание будет случайным между прогонами, но сохраните одинаковые веса (в этом случае вы можете сохранить свою модель сразу после инициализации). Поскольку вы используете Pytorch, вот хорошая статья, в которой рассматриваются повторяемые результаты. pytorch.org/docs/stable/notes/randomness.html
Codelisting
Популярные категории
На заметку программисту