Machine learning 我应该在哪里将辍学应用到卷积层?

Machine learning 我应该在哪里将辍学应用到卷积层?,machine-learning,tensorflow,Machine Learning,Tensorflow,因为“层”这个词在应用于卷积层时通常意味着不同的东西(有些人通过池将所有东西都视为一个单独的层,其他人将卷积、非线性和池视为单独的“层”)。我不清楚在卷积层的何处应用辍学 辍学是否发生在非线性和共享之间 例如,在TensorFlow中,它是否类似于: kernel_logits = tf.nn.conv2d(input_tensor, ...) + biases activations = tf.nn.relu(kernel_logits) kept_activations = tf.nn.d

因为“层”这个词在应用于卷积层时通常意味着不同的东西(有些人通过池将所有东西都视为一个单独的层,其他人将卷积、非线性和池视为单独的“层”)。我不清楚在卷积层的何处应用辍学

辍学是否发生在非线性和共享之间


例如,在TensorFlow中,它是否类似于:

kernel_logits = tf.nn.conv2d(input_tensor, ...) + biases
activations = tf.nn.relu(kernel_logits)
kept_activations = tf.nn.dropout(activations, keep_prob)
output = pool_fn(kept_activations, ...)

你可能会尝试在不同的地方申请退学,但在防止过度装修方面,你不确定在合并之前你会看到很多问题。我在CNN上看到的是,在非线性和池化之后,应用了
tensorflow.nn.dropout

    # Create a convolution + maxpool layer for each filter size
    pooled_outputs = []
    for i, filter_size in enumerate(filters):
        with tf.name_scope("conv-maxpool-%s" % filter_size):
            # Convolution Layer
            filter_shape = [filter_size, embedding_size, 1, num_filters]
            W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")
            b = tf.Variable(tf.constant(0.1, shape=[num_filters]), name="b")
            conv = tf.nn.conv2d(
                self.embedded_chars_expanded,
                W,
                strides=[1, 1, 1, 1],
                padding="VALID",
                name="conv")
            # Apply nonlinearity
            h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu")
            # Maxpooling over the outputs
            pooled = tf.nn.max_pool(
                h,
                ksize=[1, sequence_length - filter_size + 1, 1, 1],
                strides=[1, 1, 1, 1],
                padding='VALID',
                name="pool")
            pooled_outputs.append(pooled)



    # Combine all the pooled features
    num_filters_total = num_filters * len(filters)
    self.h_pool = tf.concat(3, pooled_outputs)
    self.h_pool_flat = tf.reshape(self.h_pool, [-1, num_filters_total])

    # Add dropout
    with tf.name_scope("dropout"):
        self.h_drop = tf.nn.dropout(self.h_pool_flat, self.dropout_keep_prob)

Re:“在防止过度拟合方面,不确定在合用前你会看到很多问题”:我不认为在卷积层避免过度拟合;这是到(第6.1.3节之前的最后一段)。建议在合并后应用dropout。我一直在做实验,用dropout代替2x2区域的平均降采样。我的理论是,与其对每个2x2图像区域进行下采样,不如使用“取而代之”的方法来有效地生成更多稍有不同的图像,这样我就可以有效地获得更多的训练样本,并且能够进行长时间的训练并获得更好的结果。在尝试了许多不同的设置和长时间的培训后,辍学作为一种将下采样转化为内容生成的手段被证明是无效的。更新,使用3x3实际上带来了巨大的不同。在3x3下采样上使用辍学,而不是仅对3x3下采样进行平均,这会产生显著的差异。在MNIST上,使用3x3向下采样到conv然后是maxpool时的辍学,这转化为92.5%的正确率,而使用3x3向下采样到conv然后是maxpool时的平均值,则为84.2%的正确率。