当图像属于一个类时,批量标准化是一种很好的做法吗?

时间:2017-08-10 16:26:50

标签: tensorflow delay batch-normalization

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

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

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

P.S我正在使用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)

这层可能存在错误。不确定。

非常感谢任何帮助!!

0 个答案:

没有答案