def _normalize(self, x, mean, mean_sq, message):
# make sure this is called with a variable scope
shape = x.get_shape().as_list()
assert len(shape) == 4
self.gamma_driver = tf.get_variable("gamma_driver", shape[1:],
initializer=tf.random_normal_initializer(0., 0.02))
gamma = tf.exp(self.gamma_driver)
gamma = tf.expand_dims(gamma, 0)
self.beta = tf.get_variable("beta", shape[1:],
initializer=tf.constant_initializer(0.))
beta = tf.expand_dims(self.beta, 0)
assert self.epsilon is not None
assert mean_sq is not None
assert mean is not None
std = tf.sqrt(self.epsilon + mean_sq - tf.square(mean))
out = x - mean
out = out / std
# out = tf.Print(out, [tf.reduce_mean(out, [0, 1, 2]),
# tf.reduce_mean(tf.square(out - tf.reduce_mean(out, [0, 1, 2], keep_dims=True)), [0, 1, 2])],
# message, first_n=-1)
out = out * gamma
out = out + beta
return out
评论列表
文章目录