Модель CNN с использованием техники регуляризации - PullRequest
0 голосов
/ 03 апреля 2019

Мне необходимо написать функцию build-cnn, в которой она строит все слои в сверточной нейронной сети, но также включает в себя метод регуляризации, такой как Dropout и Batch Normalization.

По сути, я могу экспериментировать только с одним из методов регуляризации за раз, чтобы увидеть разницу в производительности между выпадением и нормой партии.Следовательно, при создании модели:

mynewmodel = MyModel(name="network", num_classes=len(classes), 
                     feature_maps = 32, keep_prob = 0.5, batch_norm = None, 
                     optimizer="adam",learning_rate = 0.001)

В приведенном выше примере создается модель, в которой использует выпадение вместо нормализация партии .Если значение keep_prob равно , а не 1 , то оно использует dropout.И выпадение, и пакетная норма не могут быть использованы одновременно.

Проблема, с которой я сейчас сталкиваюсь, заключается в функции build-cnn, которую мне нужно только сделать,

def my_cnn(self,x,reuse = False, name):
    with tf.variable_scope(name, reuse=reuse):
        conv1 = tf.nn.conv2D(.....)
        if self.batch_norm != None: #if None then don't use batch normalization
             conv1 = tf.layers.batch_normalization(...)

        if self.keep_prob != 1: #if 1 then don't use dropout
             conv1 = tf.nn.dropout(...)

Было бы правильно, если бы я включил if оператор для нормы партии и выпадающий слой в этом случае, в зависимости от того, какой метод регуляризации используется?

Так как keep_prob равен 0,5, а batch_norm равен None, он будет создавать только выпадающий слой в cnn.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Пакетная нормализация и выпадение используются как для переоснащения, так и для совместного использования. Хотя это требует много доработок и тестирования. Но для вашей цели, да если бы и остальным удалось добиться цели!

Кроме того, поскольку вы используете tenorflow, я бы рекомендовал использовать тензорную доску для визуализации ваших слоев и составления графика прогонов модели.

0 голосов
/ 03 апреля 2019

Я просто новичок. Я думаю, может быть, если вы используете tf.nn.dropout, вы можете сделать это drop_out=tf.nn.dropout(conv1,keep_prob) или использовать «tf.nn.batch_normalization», а не «tf.layer.batch_normalization». И я думаю, что использование if statement, чтобы решить, какой tec должен использоваться, является правильным.

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