【问题标题】:Does dropout layer go before or after dense layer in TensorFlow?TensorFlow 中的 dropout 层是在密集层之前还是之后?
【发布时间】:2018-05-21 22:38:02
【问题描述】:

根据A Guide to TF Layers,dropout 层位于最后一个密集层之后:

dense = tf.layers.dense(input, units=1024, activation=tf.nn.relu)
dropout = tf.layers.dropout(dense, rate=params['dropout_rate'], 
                            training=mode == tf.estimator.ModeKeys.TRAIN)
logits = tf.layers.dense(dropout, units=params['output_classes'])

将它放在那个密集层之前不是更有意义吗,因此它可以学习从输入到输出的映射以及 dropout 效果?

dropout = tf.layers.dropout(prev_layer, rate=params['dropout_rate'], 
                            training=mode == 
dense = tf.layers.dense(dropout, units=1024, activation=tf.nn.relu)
logits = tf.layers.dense(dense, units=params['output_classes'])

【问题讨论】:

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


    【解决方案1】:

    这不是非此即彼的情况。通俗地说,常识是在 dense 层之后应用 dropout,而不是在卷积层或池化层之后应用 dropout,所以乍一看,这取决于你的第二个代码 sn 中的 prev_layer 到底是什么-p。

    尽管如此,如今这种“设计原则”经常被违反(请参阅RedditCrossValidated 中的一些有趣的相关讨论);即使在 Keras 中包含的MNIST CNN example 中,我们也可以看到在最大池化层之后和密集层之后都应用了 dropout:

    model = Sequential()
    model.add(Conv2D(32, kernel_size=(3, 3),
                     activation='relu',
                     input_shape=input_shape))
    model.add(Conv2D(64, (3, 3), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25)) # <-- dropout here
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.5))  # <-- and here
    model.add(Dense(num_classes, activation='softmax'))
    

    因此,您的代码 sn-ps 都是有效的,我们也可以轻松想象第三个有效选项:

    dropout = tf.layers.dropout(prev_layer, [...])
    dense = tf.layers.dense(dropout, units=1024, activation=tf.nn.relu)
    dropout2 = tf.layers.dropout(dense, [...])
    logits = tf.layers.dense(dropout2, units=params['output_classes'])
    

    作为一般建议:您链接到的教程只是想让您熟悉工具和(非常)一般原则,因此不建议“过度解释”显示的解决方案...

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 2016-12-23
      • 1970-01-01
      • 2018-03-12
      相关资源
      最近更新 更多