human
Here's a good function header given the following:
I wrote the below code

    input_shape = utils.get_incoming_shape(incoming)
    input_ndim = len(input_shape)
    gamma_init = tf.random_normal_initializer(mean=gamma, stddev=stddev)
    with tf.variable_scope(scope, default_name=name, values=[incoming], reuse=reuse) as scope:
        name = scope.name
        beta = vs.variable('beta', shape=[input_shape[(-1)]], initializer=tf.constant_initializer(beta), trainable=trainable, restore=restore)
        gamma = vs.variable('gamma', shape=[input_shape[(-1)]], initializer=gamma_init, trainable=trainable, restore=restore)
        tf.add_to_collection(((tf.GraphKeys.LAYER_VARIABLES + '/') + name), beta)
        tf.add_to_collection(((tf.GraphKeys.LAYER_VARIABLES + '/') + name), gamma)
        if (not restore):
            tf.add_to_collection(tf.GraphKeys.EXCL_RESTORE_VARS, beta)
            tf.add_to_collection(tf.GraphKeys.EXCL_RESTORE_VARS, gamma)
        axis = list(range((input_ndim - 1)))
        moving_mean = vs.variable('moving_mean', input_shape[(-1):], initializer=tf.zeros_initializer(), trainable=False, restore=restore)
        moving_variance = vs.variable('moving_variance', input_shape[(-1):], initializer=tf.constant_initializer(1.0), trainable=False, restore=restore)
        def update_mean_var():
            (mean, variance) = tf.nn.moments(incoming, axis)
            update_moving_mean = moving_averages.assign_moving_average(moving_mean, mean, decay, zero_debias=False)
            update_moving_variance = moving_averages.assign_moving_average(moving_variance, variance, decay, zero_debias=False)
            with tf.control_dependencies([update_moving_mean, update_moving_variance]):
                return (tf.identity(mean), tf.identity(variance))
        is_training = tflearn.get_training_mode()
        (mean, var) = tf.cond(is_training, update_mean_var, (lambda : (moving_mean, moving_variance)))
        inference = tf.nn.batch_normalization(incoming, mean, var, beta, gamma, epsilon)
        inference.set_shape(input_shape)
    inference.scope = scope
    inference.beta =...

What's a good function header?
assistant
#Here's a good function header.

def batch_normalization(incoming, beta=0.0, gamma=1.0, epsilon=1e-05, decay=0.9, stddev=0.002, trainable=True, restore=True, reuse=False, scope=None, name='BatchNormalization'):