假设我正在训练模型,仅从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)
这层可能存在错误。不确定。
非常感谢任何帮助!!