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)
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)
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)
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): # 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)
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):