Как добавить Dropout в CNN - PullRequest
1 голос
/ 04 июня 2019

Я тренирую данные Fashion MNIST, используя CNN.Dut to overfit Я попытался добавить слой Dropout.Но он не работает

До того, как я добавил Dropout, модель работала нормально.

def fashion_model()
    batch_size = 64
    epochs = 20
    num_classes = 10
    fashion_drop_model = Sequential()
    fashion_drop_model.add(Conv2D(32, kernel_size=(3, 3),activation='linear',padding='same',input_shape=(28,28,1)))
    fashion_drop_model.add(LeakyReLU(alpha=0.1))
    fashion_drop_model.add(MaxPooling2D((2, 2),padding='same'))
    fashion_drop_model.add(Dropout(0.25))

    fashion_drop_model.add(Conv2D(64, (3, 3), activation='linear',padding='same'))
    fashion_drop_model.add(LeakyReLU(alpha=0.1))
    fashion_drop_model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
    fashion_drop_model.add(Dropout(0.25))

    fashion_drop_model.add(Conv2D(128, (3, 3), activation='linear',padding='same'))
    fashion_drop_model.add(LeakyReLU(alpha=0.1))                  
    fashion_drop_model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
    fashion_drop_model.add(Dropout(0.4))

    fashion_drop_model.add(Flatten())
    fashion_drop_model.add(Dense(128, activation='linear'))
    fashion_drop_model.add(LeakyReLU(alpha=0.1))           
    fashion_drop_model.add(Dropout(0.3))
    fashion_drop_model.add(Dense(num_classes, activation='softmax'))

    return fashion_drop_model.summary()

fashion_model()

Я получаю ошибку: UnboundLocalError: local variable 'a' referenced before assignment

PS: послекороткое пошаговое описание кода, я понял, что ошибка в строке 8 (fashion_drop_model.add(Dropout(0.25)))

1 Ответ

2 голосов
/ 04 июня 2019

В определении функции Python отсутствует двоеточие:

def fashion_model(): #<--

После этого код должен запуститься.Запустив это в Google Colab Laboratory, вы увидите, что создается сводная информация о вашей модели:

enter image description here

Примечание

Это оченьне рекомендуется использовать выпадающие слои после сверточных слоев.Весь смысл сверточных слоев заключается в использовании пикселей в пространственной окрестности для извлечения нужных объектов для подачи в плотные слои.Выпадение разрушит эту связь и, таким образом, помешает вашей модели успешно изучить эти функции.

Подробнее об этом смотрите в Reddit: https://www.reddit.com/r/MachineLearning/comments/42nnpe/why_do_i_never_see_dropout_applied_in/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...