5

現在、Tensorflow の新しい Estimator API を使用して、カスタム画像データセットでオートエンコーダーをトレーニングしようとしています。

これまでのところ、すべてが機能しています。私が持っている唯一の問題は、モデルが評価モードのときに入力および出力画像を要約として保存することです。トレイン モードで作成したすべてのイメージ サマリーは、Tensorboard に適切に保存および表示されます。

これが私のコードです:

def model_fn_autoencoder(features, labels, mode, params):
    is_training = mode == ModeKeys.TRAIN

    # Define model's architecture
    logits = architecture_autoencoder(features, is_training=is_training)

    # Loss, training and eval operations are not needed during inference.
    loss = None
    train_op = None
    #eval_metric_ops = {}

    if mode != ModeKeys.INFER:
        loss = tf.reduce_mean(tf.square(logits - features))
        train_op = get_train_op_fn(loss, params)

        #eval_metric_ops = get_eval_metric_ops(labels, predictions)

    if mode == ModeKeys.TRAIN:
        for i in range(10):
            tf.summary.image("Input/Train/" + str(i), tf.reshape(features[i],[1, 150, 150, 3]))
            tf.summary.image("Output/Train/" + str(i), tf.reshape(logits[i],[1, 150, 150, 3]))

    if mode == ModeKeys.EVAL:
        for i in range(10):
            tf.summary.image("Input/Eval/" + str(i), tf.reshape(features[i], [1, 150, 150, 3]))
            tf.summary.image("Output/Eval/" + str(i), tf.reshape(logits[i], [1, 150, 150, 3]))

    return tf.estimator.EstimatorSpec(
        mode=mode,
        predictions=logits,
        loss=loss,
        train_op=train_op,
        #eval_metric_ops=eval_metric_ops

誰かが私が間違っていることを教えてくれるでしょうか?

更新 推定器と実験の作成のための関数は次のとおりです。

見積もり:

def get_estimator(run_config, params):
    return tf.estimator.Estimator(
        model_fn=model_fn_autoencoder,  # First-class function
        params=params,  # HParams
        config=run_config  # RunConfig
    )

実験:

def experiment_fn(run_config, params):
    run_config = run_config.replace(save_checkpoints_steps=params.min_eval_frequency)

    estimator = get_estimator(run_config, params)

    tf_path = 'path/to/tfrecord'
    train_file = 'Crops-Faces-Negtives-150-150.tfrecord'
    val_file = 'Crops-Faces-Negtives-150-150-TEST.tfrecord'
    tfrecords_train = [os.path.join(tf_path, train_file)]
    tfrecords_test = [os.path.join(tf_path, val_file)]

    # Setup data loaders
    train_input_fn = get_train_inputs(batch_size=128, tfrecord_files=tfrecords_train)
    eval_input_fn = get_train_inputs(batch_size=128, tfrecord_files=tfrecords_test)

    # Define the experiment
    experiment = tf.contrib.learn.Experiment(
        estimator=estimator,  # Estimator
        train_input_fn=train_input_fn,  # First-class function
        eval_input_fn=eval_input_fn,  # First-class function
        train_steps=params.train_steps,  # Minibatch steps
        min_eval_frequency=params.min_eval_frequency,  # Eval frequency
        eval_steps=10  # Number of eval batches
    )

    return experiment
4

1 に答える 1