def train(args, sess, epoch, image_list, label_list, index_dequeue_op, enqueue_op, image_paths_placeholder, labels_placeholder, learning_rate_placeholder, phase_train_placeholder, batch_size_placeholder, control_placeholder, step, loss, train_op, summary_op, summary_writer, reg_losses, learning_rate_schedule_file, stat, cross_entropy_mean, accuracy, learning_rate, prelogits, prelogits_center_loss, random_rotate, random_crop, random_flip, prelogits_norm, prelogits_hist_max, use_fixed_image_standardization):
    batch_number = 0
    if (args.learning_rate > 0.0):
        lr = args.learning_rate
    else:
        lr = facenet.get_learning_rate_from_file(learning_rate_schedule_file, epoch)
    if (lr <= 0):
        return False
    index_epoch = sess.run(index_dequeue_op)
    label_epoch = np.array(label_list)[index_epoch]
    image_epoch = np.array(image_list)[index_epoch]
    labels_array = np.expand_dims(np.array(label_epoch), 1)
    image_paths_array = np.expand_dims(np.array(image_epoch), 1)
    control_value = ((((facenet.RANDOM_ROTATE * random_rotate) + (facenet.RANDOM_CROP * random_crop)) + (facenet.RANDOM_FLIP * random_flip)) + (facenet.FIXED_STANDARDIZATION * use_fixed_image_standardization))
    control_array = (np.ones_like(labels_array) * control_value)
    sess.run(enqueue_op, {image_paths_placeholder: image_paths_array, labels_placeholder: labels_array, control_placeholder: control_array})
    train_time = 0
    while (batch_number < args.epoch_size):
        start_time = time.time()
        feed_dict = {learning_rate_placeholder: lr, phase_train_placeholder: True, batch_size_placeholder: args.batch_size}
        tensor_list = [loss, train_op, step, reg_losses, prelogits, cross_entropy_mean, learning_rate, prelogits_norm, accuracy, prelogits_center_loss]
        if ((batch_number % 100) == 0):
            (loss_, _, step_, reg_losses_, prelogits_, cross_entropy_mean_, lr_, prelogits_norm_, accuracy_, center_loss_, summary_str) = sess.run((tensor_list + [summary_op]), feed_dict=feed_dict)
            summary_writer.add_summary(summary_str, global_step=step_)
        else:
            (loss_, _, step_, reg_losses_, prelogits_, cross_entropy_mean_, lr_, prelogits_norm_, accuracy_, center_loss_) = sess.run(tensor_list, feed_dict=feed_dict)
        duration = (time.time() - start_time)
        stat['loss'][(step_ - 1)] = loss_
        stat['center_loss'][(step_ - 1)] = center_loss_
        stat['reg_loss'][(step_ - 1)] = np.sum(reg_losses_)
        stat['xent_loss'][(step_ - 1)] = cross_entropy_mean_
        stat['prelogits_norm'][(step_ - 1)] = prelogits_norm_
        stat['learning_rate'][(epoch - 1)] = lr_
        stat['accuracy'][(step_ - 1)] = accuracy_
        stat['prelogits_hist'][(epoch - 1), :] += np.histogram(np.minimum(np.abs(prelogits_), prelogits_hist_max), bins=1000, range=(0.0, prelogits_hist_max))[0]
        duration = (time.time() - start_time)
        print(('Epoch: [%d][%d/%d]\tTime %.3f\tLoss %2.3f\tXent %2.3f\tRegLoss %2.3f\tAccuracy %2.3f\tLr %2.5f\tCl %2.3f' % (epoch, (batch_number + 1), args.epoch_size, duration, loss_, cross_entropy_mean_, np.sum(reg_losses_), accuracy_, lr_, center_loss_)))
        batch_number += 1
        train_time += duration
    summary = tf.Summary()
    summary.value.add(tag='time/total', simple_value=train_time)
    summary_writer.add_summary(summary, global_step=step_)
    return True
def train(args, sess, epoch, image_list, label_list, index_dequeue_op, enqueue_op, image_paths_placeholder, labels_placeholder, learning_rate_placeholder, phase_train_placeholder, batch_size_placeholder, control_placeholder, step, loss, train_op, summary_op, summary_writer, reg_losses, learning_rate_schedule_file, stat, cross_entropy_mean, accuracy, learning_rate, prelogits, prelogits_center_loss, random_rotate, random_crop, random_flip, prelogits_norm, prelogits_hist_max, use_fixed_image_standardization):
    batch_number = 0
    if (args.learning_rate > 0.0):
        lr = args.learning_rate
    else:
        lr = facenet.get_learning_rate_from_file(learning_rate_schedule_file, epoch)
    if (lr <= 0):
        return False
    index_epoch = sess.run(index_dequeue_op)
    label_epoch = np.array(label_list)[index_epoch]
    image_epoch = np.array(image_list)[index_epoch]
    labels_array = np.expand_dims(np.array(label_epoch), 1)
    image_paths_array = np.expand_dims(np.array(image_epoch), 1)
    control_value = ((((facenet.RANDOM_ROTATE * random_rotate) + (facenet.RANDOM_CROP * random_crop)) + (facenet.RANDOM_FLIP * random_flip)) + (facenet.FIXED_STANDARDIZATION * use_fixed_image_standardization))
    control_array = (np.ones_like(labels_array) * control_value)
    sess.run(enqueue_op, {image_paths_placeholder: image_paths_array, labels_placeholder: labels_array, control_placeholder: control_array})
    train_time = 0
    while (batch_number < args.epoch_size):
        start_time = time.time()
        feed_dict = {learning_rate_placeholder: lr, phase_train_placeholder: True, batch_size_placeholder: args.batch_size}
        tensor_list = [loss, train_op, step, reg_losses, prelogits, cross_entropy_mean, learning_rate, prelogits_norm, accuracy, prelogits_center_loss]
        if ((batch_number % 100) == 0):
            (loss_, _, step_, reg_losses_, prelogits_, cross_entropy_mean_, lr_, prelogits_norm_, accuracy_, center_loss_, summary_str) = sess.run((tensor_list + [summary_op]), feed_dict=feed_dict)
            summary_writer.add_summary(summary_str, global_step=step_)
        else:
            (loss_, _, step_, reg_losses_, prelogits_, cross_entropy_mean_, lr_, prelogits_norm_, accuracy_, center_loss_) = sess.run(tensor_list, feed_dict=feed_dict)
        duration = (time.time() - start_time)
        stat['loss'][(step_ - 1)] = loss_
        stat['center_loss'][(step_ - 1)] = center_loss_
        stat['reg_loss'][(step_ - 1)] = np.sum(reg_losses_)
        stat['xent_loss'][(step_ - 1)] = cross_entropy_mean_
        stat['prelogits_norm'][(step_ - 1)] = prelogits_norm_
        stat['learning_rate'][(epoch - 1)] = lr_
        stat['accuracy'][(step_ - 1)] = accuracy_
        stat['prelogits_hist'][(epoch - 1), :] += np.histogram(np.minimum(np.abs(prelogits_), prelogits_hist_max), bins=1000, range=(0.0, prelogits_hist_max))[0]
        duration = (time.time() - start_time)
        print(('Epoch: [%d][%d/%d]\tTime %.3f\tLoss %2.3f\tXent %2.3f\tRegLoss %2.3f\tAccuracy %2.3f\tLr %2.5f\tCl %2.3f' % (epoch, (batch_number + 1), args.epoch_size, duration, loss_, cross_entropy_mean_, np.sum(reg_losses_), accuracy_, lr_, center_loss_)))
        batch_number += 1
        train_time += duration
    summary = tf.Summary()
    summary.value.add(tag='time/total', simple_value=train_time)
    summary_writer.add_summary(summary, global_step=step_)
    return True