【问题标题】:CNN model using regularisation technique使用正则化技术的 CNN 模型
【发布时间】:2019-08-24 10:17:40
【问题描述】:

我需要编写一个 build-cnn 函数,它在卷积神经网络中构建所有层,还包括正则化技术,例如 Dropout 和 Batch Normalization。

基本上,我一次只能试验一种正则化技术,以查看 dropout 和 batch norm 之间的性能差异。因此,在创建模型时:

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

在上面,它正在创建使用 dropout 而不是 batch normalisation 的模型。如果 keep_prob 的值是不是 1,那么它使用 dropout。 dropout 和 batch norm 不能同时使用。

我现在面临的问题是我只需要做的 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(...)

如果我在这种情况下包含 batch normdropout 层if 语句 是否正确,具体取决于哪种正则化技术正在使用吗?

由于keep_prob为0.5,batch_norm为None,所以只会在cnn中创建dropout层。

【问题讨论】:

    标签: tensorflow machine-learning deep-learning conv-neural-network


    【解决方案1】:

    我只是一个初学者。我想也许如果你使用tf.nn.dropout,你可能会这样做drop_out=tf.nn.dropout(conv1,keep_prob),或者使用'tf.nn.batch_normalization'而不是'tf.layer.batch_normalization'。而且我认为使用if statement 来决定应该使用哪个技术是正确的。

    【讨论】:

      【解决方案2】:

      Batch normalization 和 dropout 都是用来处理过拟​​合的,可以一起使用。虽然这需要大量的调整和测试。但出于您的目的, ifs 和 elses 应该可以解决问题!

      另外,由于您使用的是 tensorflow,我建议您使用 tensorboard 来可视化您的图层并绘制模型运行的图形。

      【讨论】:

        猜你喜欢
        • 2015-12-09
        • 1970-01-01
        • 2022-09-23
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-02-20
        • 2021-06-06
        相关资源
        最近更新 更多