Мне необходимо написать функцию 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.