def main(_, run_eval_loop=True):
  with tf.name_scope('inputs'):
    noise, one_hot_labels = _get_generator_inputs(
        FLAGS.num_images_per_class, NUM_CLASSES, FLAGS.noise_dims)

  # Generate images.
  with tf.variable_scope('Generator'):  # Same scope as in train job.
    images = networks.conditional_generator((noise, one_hot_labels))

  # Visualize images.
  reshaped_img = tfgan.eval.image_reshaper(
      images, num_cols=FLAGS.num_images_per_class)
  tf.summary.image('generated_images', reshaped_img, max_outputs=1)

  # Calculate evaluation metrics.
  tf.summary.scalar('MNIST_Classifier_score',
                    util.mnist_score(images, FLAGS.classifier_filename))
  tf.summary.scalar('MNIST_Cross_entropy',
                    util.mnist_cross_entropy(
                        images, one_hot_labels, FLAGS.classifier_filename))

  # Write images to disk.
  image_write_ops = tf.write_file(
      '%s/%s'% (FLAGS.eval_dir, 'conditional_gan.png'),
      tf.image.encode_png(data_provider.float_image_to_uint8(reshaped_img[0])))

  # For unit testing, use `run_eval_loop=False`.
  if not run_eval_loop: return
  tf.contrib.training.evaluate_repeatedly(
      FLAGS.checkpoint_dir,
      hooks=[tf.contrib.training.SummaryAtEndHook(FLAGS.eval_dir),
             tf.contrib.training.StopAfterNEvalsHook(1)],
      eval_ops=image_write_ops,
      max_number_of_evaluations=FLAGS.max_number_of_evaluations)
Ejemplo n.º 2
0
def main(_, run_eval_loop=True):
  with tf.name_scope('inputs'):
    noise, one_hot_labels = _get_generator_inputs(
        FLAGS.num_images_per_class, NUM_CLASSES, FLAGS.noise_dims)

  # Generate images.
  with tf.variable_scope('Generator'):  # Same scope as in train job.
    images = networks.conditional_generator((noise, one_hot_labels))

  # Visualize images.
  reshaped_img = tfgan.eval.image_reshaper(
      images, num_cols=FLAGS.num_images_per_class)
  tf.summary.image('generated_images', reshaped_img, max_outputs=1)

  # Calculate evaluation metrics.
  tf.summary.scalar('MNIST_Classifier_score',
                    util.mnist_score(images, FLAGS.classifier_filename))
  tf.summary.scalar('MNIST_Cross_entropy',
                    util.mnist_cross_entropy(
                        images, one_hot_labels, FLAGS.classifier_filename))

  # Write images to disk.
  image_write_ops = tf.write_file(
      '%s/%s'% (FLAGS.eval_dir, 'conditional_gan.png'),
      tf.image.encode_png(data_provider.float_image_to_uint8(reshaped_img[0])))

  # For unit testing, use `run_eval_loop=False`.
  if not run_eval_loop: return
  tf.contrib.training.evaluate_repeatedly(
      FLAGS.checkpoint_dir,
      hooks=[tf.contrib.training.SummaryAtEndHook(FLAGS.eval_dir),
             tf.contrib.training.StopAfterNEvalsHook(1)],
      eval_ops=image_write_ops,
      max_number_of_evaluations=FLAGS.max_number_of_evaluations)
Ejemplo n.º 3
0
def main(_, run_eval_loop=True):
  # Fetch real images.
  with tf.name_scope('inputs'):
    real_images, _, _ = data_provider.provide_data(
        'train', FLAGS.num_images_generated, FLAGS.dataset_dir)

  image_write_ops = None
  if FLAGS.eval_real_images:
    tf.summary.scalar('MNIST_Classifier_score',
                      util.mnist_score(real_images, FLAGS.classifier_filename))
  else:
    # In order for variables to load, use the same variable scope as in the
    # train job.
    with tf.variable_scope('Generator'):
      images = networks.unconditional_generator(
          tf.random_normal([FLAGS.num_images_generated, FLAGS.noise_dims]))

      sess = tf.Session()
      saver = tf.train.Saver()
      if not restore_from_checkpoint(sess, saver):
        raise NotImplementedError

      options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
      run_metadata = tf.RunMetadata()
      sess.run(images, options=options, run_metadata=run_metadata)
      cg = CompGraph('gan_mnist', run_metadata, tf.get_default_graph())

      cg_tensor_dict = cg.get_tensors()
      cg_sorted_keys = sorted(cg_tensor_dict.keys())
      cg_sorted_items = []
      for cg_key in cg_sorted_keys:
        cg_sorted_items.append(tf.shape(cg_tensor_dict[cg_key]))

      cg_sorted_shape = sess.run(cg_sorted_items)
      cg.op_analysis(dict(zip(cg_sorted_keys, cg_sorted_shape)),
                     'gan_mnist.pickle')

      exit(0)
    #tf.summary.scalar('MNIST_Frechet_distance',
    #                  util.mnist_frechet_distance(
    #                      real_images, images, FLAGS.classifier_filename))
    #tf.summary.scalar('MNIST_Classifier_score',
    #                  util.mnist_score(images, FLAGS.classifier_filename))
    if FLAGS.num_images_generated >= 100:
      reshaped_images = tfgan.eval.image_reshaper(
          images[:100, ...], num_cols=10)
      uint8_images = data_provider.float_image_to_uint8(reshaped_images)
      image_write_ops = tf.write_file(
          '%s/%s'% (FLAGS.eval_dir, 'unconditional_gan.png'),
          tf.image.encode_png(uint8_images[0]))

  # For unit testing, use `run_eval_loop=False`.
  if not run_eval_loop: return
  tf.contrib.training.evaluate_repeatedly(
      FLAGS.checkpoint_dir,
      hooks=[tf.contrib.training.SummaryAtEndHook(FLAGS.eval_dir),
             tf.contrib.training.StopAfterNEvalsHook(1)],
      eval_ops=image_write_ops,
      max_number_of_evaluations=FLAGS.max_number_of_evaluations)
Ejemplo n.º 4
0
def main(_, run_eval_loop=True):
  with tf.name_scope('inputs'):
    noise_args = (FLAGS.noise_samples, CAT_SAMPLE_POINTS, CONT_SAMPLE_POINTS,
                  FLAGS.unstructured_noise_dims, FLAGS.continuous_noise_dims)
    # Use fixed noise vectors to illustrate the effect of each dimension.
    display_noise1 = util.get_eval_noise_categorical(*noise_args)
    display_noise2 = util.get_eval_noise_continuous_dim1(*noise_args)
    display_noise3 = util.get_eval_noise_continuous_dim2(*noise_args)
    _validate_noises([display_noise1, display_noise2, display_noise3])

  # Visualize the effect of each structured noise dimension on the generated
  # image.
  def generator_fn(inputs):
    return networks.infogan_generator(
        inputs, len(CAT_SAMPLE_POINTS), is_training=False)
  with tf.variable_scope('Generator') as genscope:  # Same scope as in training.
    categorical_images = generator_fn(display_noise1)
  reshaped_categorical_img = tfgan.eval.image_reshaper(
      categorical_images, num_cols=len(CAT_SAMPLE_POINTS))
  tf.summary.image('categorical', reshaped_categorical_img, max_outputs=1)

  with tf.variable_scope(genscope, reuse=True):
    continuous1_images = generator_fn(display_noise2)
  reshaped_continuous1_img = tfgan.eval.image_reshaper(
      continuous1_images, num_cols=len(CONT_SAMPLE_POINTS))
  tf.summary.image('continuous1', reshaped_continuous1_img, max_outputs=1)

  with tf.variable_scope(genscope, reuse=True):
    continuous2_images = generator_fn(display_noise3)
  reshaped_continuous2_img = tfgan.eval.image_reshaper(
      continuous2_images, num_cols=len(CONT_SAMPLE_POINTS))
  tf.summary.image('continuous2', reshaped_continuous2_img, max_outputs=1)

  # Evaluate image quality.
  all_images = tf.concat(
      [categorical_images, continuous1_images, continuous2_images], 0)
  tf.summary.scalar('MNIST_Classifier_score',
                    util.mnist_score(all_images, FLAGS.classifier_filename))

  # Write images to disk.
  image_write_ops = []
  if FLAGS.write_to_disk:
    image_write_ops.append(_get_write_image_ops(
        FLAGS.eval_dir, 'categorical_infogan.png', reshaped_categorical_img[0]))
    image_write_ops.append(_get_write_image_ops(
        FLAGS.eval_dir, 'continuous1_infogan.png', reshaped_continuous1_img[0]))
    image_write_ops.append(_get_write_image_ops(
        FLAGS.eval_dir, 'continuous2_infogan.png', reshaped_continuous2_img[0]))

  # For unit testing, use `run_eval_loop=False`.
  if not run_eval_loop: return
  tf.contrib.training.evaluate_repeatedly(
      FLAGS.checkpoint_dir,
      hooks=[tf.contrib.training.SummaryAtEndHook(FLAGS.eval_dir),
             tf.contrib.training.StopAfterNEvalsHook(1)],
      eval_ops=image_write_ops,
      max_number_of_evaluations=FLAGS.max_number_of_evaluations)
Ejemplo n.º 5
0
def main(_, run_eval_loop=True):
    # Fetch real images.
    with tf.name_scope('inputs'):
        real_images, _, _ = data_provider.provide_data(
            'train', FLAGS.num_images_generated, FLAGS.dataset_dir)

    image_write_ops = None
    if FLAGS.eval_real_images:
        tf.summary.scalar(
            'MNIST_Classifier_score',
            util.mnist_score(real_images, FLAGS.classifier_filename))
    else:
        # In order for variables to load, use the same variable scope as in the
        # train job.
        with tf.variable_scope('Generator'):
            images = networks.unconditional_generator(tf.random_normal(
                [FLAGS.num_images_generated, FLAGS.noise_dims]),
                                                      is_training=False)
        tf.summary.scalar(
            'MNIST_Frechet_distance',
            util.mnist_frechet_distance(real_images, images,
                                        FLAGS.classifier_filename))
        tf.summary.scalar('MNIST_Classifier_score',
                          util.mnist_score(images, FLAGS.classifier_filename))
        if FLAGS.num_images_generated >= 100 and FLAGS.write_to_disk:
            reshaped_images = tfgan.eval.image_reshaper(images[:100, ...],
                                                        num_cols=10)
            uint8_images = data_provider.float_image_to_uint8(reshaped_images)
            image_write_ops = tf.write_file(
                '%s/%s' % (FLAGS.eval_dir, 'unconditional_gan.png'),
                tf.image.encode_png(uint8_images[0]))

    # For unit testing, use `run_eval_loop=False`.
    if not run_eval_loop: return
    tf.contrib.training.evaluate_repeatedly(
        FLAGS.checkpoint_dir,
        hooks=[
            tf.contrib.training.SummaryAtEndHook(FLAGS.eval_dir),
            tf.contrib.training.StopAfterNEvalsHook(1)
        ],
        eval_ops=image_write_ops,
        max_number_of_evaluations=FLAGS.max_number_of_evaluations)
Ejemplo n.º 6
0
def main(_, run_eval_loop=True):
  # Fetch real images.
  with tf.name_scope('inputs'):
    real_images, _, _ = data_provider.provide_data(
        'train', FLAGS.num_images_generated, FLAGS.dataset_dir)

  image_write_ops = None
  if FLAGS.eval_real_images:
    tf.summary.scalar('MNIST_Classifier_score',
                      util.mnist_score(real_images, FLAGS.classifier_filename))
  else:
    # In order for variables to load, use the same variable scope as in the
    # train job.
    with tf.variable_scope('Generator'):
      images = networks.unconditional_generator(
          tf.random_normal([FLAGS.num_images_generated, FLAGS.noise_dims]),
          is_training=False)
    tf.summary.scalar('MNIST_Frechet_distance',
                      util.mnist_frechet_distance(
                          real_images, images, FLAGS.classifier_filename))
    tf.summary.scalar('MNIST_Classifier_score',
                      util.mnist_score(images, FLAGS.classifier_filename))
    if FLAGS.num_images_generated >= 100 and FLAGS.write_to_disk:
      reshaped_images = tfgan.eval.image_reshaper(
          images[:100, ...], num_cols=10)
      uint8_images = data_provider.float_image_to_uint8(reshaped_images)
      image_write_ops = tf.write_file(
          '%s/%s'% (FLAGS.eval_dir, 'unconditional_gan.png'),
          tf.image.encode_png(uint8_images[0]))

  # For unit testing, use `run_eval_loop=False`.
  if not run_eval_loop: return
  tf.contrib.training.evaluate_repeatedly(
      FLAGS.checkpoint_dir,
      hooks=[tf.contrib.training.SummaryAtEndHook(FLAGS.eval_dir),
             tf.contrib.training.StopAfterNEvalsHook(1)],
      eval_ops=image_write_ops,
      max_number_of_evaluations=FLAGS.max_number_of_evaluations)
def main(_, run_eval_loop=True):
    with tf.name_scope('inputs'):
        noise_args = (FLAGS.noise_samples, CAT_SAMPLE_POINTS,
                      CONT_SAMPLE_POINTS, FLAGS.unstructured_noise_dims,
                      FLAGS.continuous_noise_dims)
        # Use fixed noise vectors to illustrate the effect of each dimension.
        display_noise1 = util.get_eval_noise_categorical(*noise_args)
        display_noise2 = util.get_eval_noise_continuous_dim1(*noise_args)
        display_noise3 = util.get_eval_noise_continuous_dim2(*noise_args)
        _validate_noises([display_noise1, display_noise2, display_noise3])

    # Visualize the effect of each structured noise dimension on the generated
    # image.
    generator_fn = lambda x: networks.infogan_generator(
        x, len(CAT_SAMPLE_POINTS))
    with tf.variable_scope(
            'Generator') as genscope:  # Same scope as in training.
        categorical_images = generator_fn(display_noise1)
    reshaped_categorical_img = tfgan.eval.image_reshaper(
        categorical_images, num_cols=len(CAT_SAMPLE_POINTS))
    tf.summary.image('categorical', reshaped_categorical_img, max_outputs=1)

    with tf.variable_scope(genscope, reuse=True):
        continuous1_images = generator_fn(display_noise2)
    reshaped_continuous1_img = tfgan.eval.image_reshaper(
        continuous1_images, num_cols=len(CONT_SAMPLE_POINTS))
    tf.summary.image('continuous1', reshaped_continuous1_img, max_outputs=1)

    with tf.variable_scope(genscope, reuse=True):
        continuous2_images = generator_fn(display_noise3)
    reshaped_continuous2_img = tfgan.eval.image_reshaper(
        continuous2_images, num_cols=len(CONT_SAMPLE_POINTS))
    tf.summary.image('continuous2', reshaped_continuous2_img, max_outputs=1)

    # Evaluate image quality.
    all_images = tf.concat(
        [categorical_images, continuous1_images, continuous2_images], 0)
    tf.summary.scalar('MNIST_Classifier_score',
                      util.mnist_score(all_images, FLAGS.classifier_filename))

    # Write images to disk.
    image_write_ops = []
    image_write_ops.append(
        _get_write_image_ops(FLAGS.eval_dir, 'categorical_infogan.png',
                             reshaped_categorical_img[0]))
    image_write_ops.append(
        _get_write_image_ops(FLAGS.eval_dir, 'continuous1_infogan.png',
                             reshaped_continuous1_img[0]))
    image_write_ops.append(
        _get_write_image_ops(FLAGS.eval_dir, 'continuous2_infogan.png',
                             reshaped_continuous2_img[0]))

    # For unit testing, use `run_eval_loop=False`.
    if not run_eval_loop: return
    tf.contrib.training.evaluate_repeatedly(
        FLAGS.checkpoint_dir,
        hooks=[
            tf.contrib.training.SummaryAtEndHook(FLAGS.eval_dir),
            tf.contrib.training.StopAfterNEvalsHook(1)
        ],
        eval_ops=image_write_ops,
        max_number_of_evaluations=FLAGS.max_number_of_evaluations)
Ejemplo n.º 8
0
        discriminator_optimizer = tf.train.AdamOptimizer(0.0001, beta1=0.5)
        gan_train_ops = tf.contrib.gan.gan_train_ops(
            gan_model,
            improved_wgan_loss,
            generator_optimizer,
            discriminator_optimizer)

    num_images_to_eval = 500
    MNIST_CLASSIFIER_FROZEN_GRAPH = str(Path('mnist_data/frozen.pb').resolve())

    # For variables to load, use the same variable scope as in the train job.
    with tf.variable_scope('Generator', reuse=True):
        eval_images = gan_model.generator_fn(
            tf.random_normal([num_images_to_eval, noise_dims]))

    eval_score = util.mnist_score(eval_images, MNIST_CLASSIFIER_FROZEN_GRAPH)

    # We have the option to train the discriminator more than one step for every
    # step of the generator. In order to do this, we use a `GANTrainSteps` with
    # desired values. For this example, we use the default 1 generator train step
    # for every discriminator train step.
    train_step_fn = tf.contrib.gan.get_sequential_train_steps()

    global_step = tf.train.get_or_create_global_step()
    loss_values, mnist_score_values  = [], []

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        with tf.contrib.slim.queues.QueueRunners(sess):
            start_time = time.time()
            for i in range(801):