title: Tensorflow Estimator API save image summary in eval mode
body: <p>at the moment I try to train a autoencoder on a custom image dataset using the new Estimator API of Tensorflow.</p>
  
  <p>So far everything is working. The only problem I have is to save the input and output images as summary when the model is in evaluation mode. All image summaries I create in train mode are stored and shown in Tensorboard properly. </p>
  
  <p>Here is my code:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>Maybe someone can tell me what I'm doing wrong?</p>
  
  <p><strong>Update</strong>
  Here are the functions for the estimator and experiment creation:</p>
  
  <p>Estimator:</p>
  
  <pre><code>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
      )
  </code></pre>
  
  <p>Experiment:</p>
  
  <pre><code>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
  </code></pre>