0

假设我正在训练一个模型来仅从 MNIST 数据集中对 8 号图像进行分类。在这种情况下使用批量标准化是一个好习惯吗?

当图像是异构的,即属于不同的类别,例如鸟、狗、猫等时,也许它会很好用。换句话说,如果样本最初属于同一类,那么网络将适应每一层的隐藏分布,因为它们不会有太大变化(可能在开始时网络正在训练),但后来,权重会学习。但是给一个不同类别的网络图像,那么隐藏分布会​​从一个图像到另一个图像(即从一个类到另一个)有很大差异是有道理的。

我之所以问这个问题,是因为我试图训练一个一次启用批量标准化并在另一次禁用的模型。而且由于该模型已经在属于同一类的图像上进行了训练,因此该模型似乎需要更多的时间来进行批量归一化的训练。

PS 我正在使用 tensorflow 构建我的模型,这是我正在使用的Batch Norm层(来自: https ://r2rt.com/implementing-batch-normalization-in-tensorflow.html ):

def batch_norm_wrapper(inputs, is_training, convlayer, decay = 0.999):

    scale = tf.Variable(tf.ones([inputs.get_shape()[-1]]))
    beta = tf.Variable(tf.zeros([inputs.get_shape()[-1]]))
    pop_mean = tf.Variable(tf.zeros([inputs.get_shape()[-1]]), trainable=False)
    pop_var = tf.Variable(tf.ones([inputs.get_shape()[-1]]), trainable=False)

    if is_training:
        if convlayer:
            batch_mean, batch_var = tf.nn.moments(inputs, [0, 1, 2])
        else:
            batch_mean, batch_var = tf.nn.moments(inputs, [0])

        train_mean = tf.assign(pop_mean,
                               pop_mean * decay + batch_mean * (1 - decay))
        train_var = tf.assign(pop_var,
                              pop_var * decay + batch_var * (1 - decay))
        with tf.control_dependencies([train_mean, train_var]):
            return tf.nn.batch_normalization(inputs,
                batch_mean, batch_var, beta, scale, epsilon)
    else:
        return tf.nn.batch_normalization(inputs,
            pop_mean, pop_var, beta, scale, epsilon)

也许这一层有错误。没有把握。

任何帮助深表感谢!!

4

0 回答 0