예제 #1
0
 def train_input_fn():
     with tf.device('/cpu:0'):
         images, _, _ = data_provider.provide_data('train',
                                                   batch_size,
                                                   dataset_dir,
                                                   num_threads=num_threads)
     noise = tf.random_normal([batch_size, noise_dims])
     return noise, images
예제 #2
0
def image2image():
    # Set up the input pipeline.
    input_image, target_image = data_provider.provide_data(FLAGS.batch_size)

    # Build the generator and discriminator.
    gan_model = tfgan.gan_model(
        generator_fn=nets.generator,  # you define
        discriminator_fn=nets.discriminator,  # you define
        real_data=target_image,
        generator_inputs=input_image)

    # Build the GAN loss and standard pixel loss.
    gan_loss = tfgan.gan_loss(
        gan_model,
        generator_loss_fn=tfgan.losses.least_squares_generator_loss,
        discriminator_loss_fn=tfgan.losses.least_squares_discriminator_loss)
    l1_pixel_loss = tf.norm(gan_model.real_data - gan_model.generated_data,
                            ord=1)

    # Modify the loss tuple to include the pixel loss.
    gan_loss = tfgan.losses.combine_adversarial_loss(
        gan_loss, gan_model, l1_pixel_loss, weight_factor=FLAGS.weight_factor)
예제 #3
0
def prepare_data():
    MNIST_DATA_DIR = '/tmp/mnist-data'
    if not tf.gfile.Exists(MNIST_DATA_DIR):
        tf.gfile.MakeDirs(MNIST_DATA_DIR)
    download_and_convert_mnist.run(MNIST_DATA_DIR)

    # FIXME why reset graph here?
    tf.reset_default_graph()
    # Define our input pipeline. Pin it to the CPU so that the GPU can be reserved
    # for forward and backwards propogation.
    batch_size = 32
    with tf.device('/cpu:0'):
        # data provider FIXME why returning three fields?
        real_images, _, _ = data_provider.provide_data('train', batch_size,
                                                       MNIST_DATA_DIR)

    # Sanity check that we're getting images.
    check_real_digits = tfgan.eval.image_reshaper(real_images[:20, ...],
                                                  num_cols=10)
    visualize_digits(check_real_digits)
    # FIXME is this a tensor or an iterator?
    return real_images
예제 #4
0
 def train_input_fn():
     with tf.device('/cpu:0'):
         real_images, _, _ = data_provider.provide_data(
             'train', batch_size, MNIST_DATA_DIR)
     noise = tf.random_normal([batch_size, noise_dims])
     return noise, real_images
# In[5]:

MNIST_DATA_DIR = '/tmp/mnist-data'

if not tf.gfile.Exists(MNIST_DATA_DIR):
    tf.gfile.MakeDirs(MNIST_DATA_DIR)

download_and_convert_mnist.run(MNIST_DATA_DIR)

tf.reset_default_graph()

# Define our input pipeline. Pin it to the CPU so that the GPU can be reserved
# for forward and backwards propogation.
batch_size = 32
with tf.device('/cpu:0'):
    real_images, _, _ = data_provider.provide_data('train', batch_size,
                                                   MNIST_DATA_DIR)

# Sanity check that we're getting images.
check_real_digits = tfgan.eval.image_reshaper(real_images[:20, ...],
                                              num_cols=10)
visualize_digits(check_real_digits)


def generator_fn(noise, weight_decay=2.5e-5, is_training=True):
    """Simple generator to produce MNIST images.
    
    Args:
        noise: A single Tensor representing noise.
        weight_decay: The value of the l2 weight decay.
        is_training: If `True`, batch norm uses batch statistics. If `False`, batch
            norm uses the exponential moving average collected from population 
예제 #6
0
파일: train.py 프로젝트: ALISCIFP/models
 def train_input_fn():
   with tf.device('/cpu:0'):
     images, _, _ = data_provider.provide_data(
         'train', batch_size, dataset_dir, num_threads=num_threads)
   noise = tf.random_normal([batch_size, noise_dims])
   return noise, images
예제 #7
0
파일: test3.py 프로젝트: huyoboy/dl

MNIST_DATA_DIR = '/tmp/mnist-data'

if not tf.gfile.Exists(MNIST_DATA_DIR):
    tf.gfile.MakeDirs(MNIST_DATA_DIR)

download_and_convert_mnist.run(MNIST_DATA_DIR)

tf.reset_default_graph()

# Define our input pipeline. Pin it to the CPU so that the GPU can be reserved
# for forward and backwards propogation.
batch_size = 32
with tf.device('/cpu:0'):
    real_images, _, _ = data_provider.provide_data(
        'train', batch_size, MNIST_DATA_DIR)

# Sanity check that we're getting images.
check_real_digits = tfgan.eval.image_reshaper(real_images[:20,...], num_cols=10)
visualize_digits(check_real_digits)


def infogan_generator(inputs, categorical_dim, weight_decay=2.5e-5,
                      is_training=True):
    """InfoGAN discriminator network on MNIST digits.

    Based on a paper https://arxiv.org/abs/1606.03657 and their code
    https://github.com/openai/InfoGAN.

    Args:
        inputs: A 3-tuple of Tensors (unstructured_noise, categorical structured
예제 #8
0
DATA_DIR = "assets/data/"
RESULT_DIR = "assets/results/"

# short cuts
tfgan = tf.contrib.gan
slim = tf.contrib.slim

if not tf.gfile.Exists(DATA_DIR):  # check if data directory already exists
    tf.gfile.MakeDirs(DATA_DIR)

download_and_convert_mnist.run(DATA_DIR)  # download data if missing

# input pipeline
batch_size = 32
with tf.device('/cpu:0'):  # pin it to the cpu to free up gpu for propagation
    images, one_hot_labels, _ = data_provider.provide_data(
        'train', batch_size, DATA_DIR)

# Sanity check that we're getting images.
imgs_to_visualize = tfgan.eval.image_reshaper(images[:20, ...], num_cols=10)
visualizer.pre_train_image(imgs_to_visualize, save=False)

noise_dims = 64
conditional_gan_model = tfgan.gan_model(generator_fn=tf_nets.generator,
                                        discriminator_fn=tf_nets.discriminator,
                                        real_data=images,
                                        generator_inputs=(tf.random_normal(
                                            [batch_size,
                                             noise_dims]), one_hot_labels))

# Sanity check that currently generated images are garbage.
cond_generated_data_to_visualize = tfgan.eval.image_reshaper(
예제 #9
0
def train(is_train):
    
    if not tf.gfile.Exists(MNIST_DATA_DIR):
        tf.gfile.MakeDirs(MNIST_DATA_DIR)
    
    #download_and_convert_mnist.run(MNIST_DATA_DIR)
    
    tf.reset_default_graph()
    
    # Define our input pipeline. Pin it to the CPU so that the GPU can be reserved
    # for forward and backwards propogation.
    batch_size = 32
    with tf.device('/cpu:0'):
        real_images, _, _ = data_provider.provide_data(
            'train', batch_size, MNIST_DATA_DIR)
    
    # Sanity check that we're getting images.
    #check_real_digits = tfgan.eval.image_reshaper(
    #    real_images[:20,...], num_cols=10)
    #print('visualize_digits')
    #visualize_digits(check_real_digits)
    #plt.show()    
    
    gan_model = tfgan.gan_model(
        generator_fn,
        discriminator_fn,
        real_data=real_images,
        generator_inputs=tf.random_normal([batch_size, noise_dims]))
    
    improved_wgan_loss = tfgan.gan_loss(
        gan_model,
        # We make the loss explicit for demonstration, even though the default is 
        # Wasserstein loss.
        generator_loss_fn=tfgan.losses.wasserstein_generator_loss,
        discriminator_loss_fn=tfgan.losses.wasserstein_discriminator_loss,
        gradient_penalty_weight=1.0)
    
    # Sanity check that we can evaluate our losses.
    print("Sanity check that we can evaluate our losses")
    for gan_loss, name in [(improved_wgan_loss, 'improved wgan loss')]:
        evaluate_tfgan_loss(gan_loss, name)
    
    
    #generator_optimizer = tf.train.AdamOptimizer(0.001, beta1=0.5)
    #discriminator_optimizer = tf.train.AdamOptimizer(0.0001, beta1=0.5)
    generator_optimizer = tf.train.RMSPropOptimizer(0.001)
    discriminator_optimizer = tf.train.RMSPropOptimizer(0.0001)
    gan_train_ops = tfgan.gan_train_ops(
        gan_model,
        improved_wgan_loss,
        generator_optimizer,
        discriminator_optimizer)
    
    # ### Evaluation
    
    num_images_to_eval = 500
    MNIST_CLASSIFIER_FROZEN_GRAPH = os.path.join(
            RESEARCH_FOLDER,
            'gan/mnist/data/classify_mnist_graph_def.pb')
    
    # 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]),
            is_training=False)
    
    # Calculate Inception score.
    eval_score = util.mnist_score(eval_images, MNIST_CLASSIFIER_FROZEN_GRAPH)
    
    # Calculate Frechet Inception distance.
    with tf.device('/cpu:0'):
        real_images, _, _ = data_provider.provide_data(
            'train', num_images_to_eval, MNIST_DATA_DIR)
    frechet_distance = util.mnist_frechet_distance(
        real_images, eval_images, MNIST_CLASSIFIER_FROZEN_GRAPH)
    
    # Reshape eval images for viewing.
    generated_data_to_visualize = tfgan.eval.image_reshaper(
        eval_images[:20,...], num_cols=10)
    
     # This code block should take about **1 minute** to run on a GPU kernel, and about **8 minutes** on CPU.
    
    train_step_fn = tfgan.get_sequential_train_steps()
    
    global_step = tf.train.get_or_create_global_step()
    loss_values, mnist_scores, frechet_distances  = [], [], []
    tf.summary.scalar('dis_loss', gan_loss.discriminator_loss)
    tf.summary.scalar('gen_loss', gan_loss.generator_loss)
    merged = tf.summary.merge_all()
    saver = tf.train.Saver()
    saver_hook =  tf.train.CheckpointSaverHook(
      checkpoint_dir= "./models",
      save_steps=1000,
      saver=saver)
     
    print("Graph trainable nodes:")
    for v in tf.trainable_variables():
        print (v.name)
   
    with tf.train.SingularMonitoredSession(hooks=[saver_hook],
        checkpoint_dir="./models") as sess:
        start_time = time.time()
        train_writer = tf.summary.FileWriter("./summary", sess.graph)
        if is_train:
            for i in xrange(2000):
                cur_loss, _ = train_step_fn(
                    sess, gan_train_ops, global_step, train_step_kwargs={})
                loss_values.append((i, cur_loss))

                if i % 10 == 0:
                    merged_val = sess.run(merged)
                    train_writer.add_summary(merged_val, i)
                    print("Step:{}".format(i))

            mnist_score, f_distance, digits_np = sess.run(
                [eval_score, frechet_distance, generated_data_to_visualize])
            mnist_scores.append((i, mnist_score))
            frechet_distances.append((i, f_distance))
            print('Current loss: %f' % cur_loss)
            print('Current MNIST score: %f' % mnist_scores[-1][1])
            print('Current Frechet distance: %f' % frechet_distances[-1][1])
            visualize_training_generator(i, start_time, digits_np)
            
        else: #generate from trained model
            generated = sess.run(eval_images)
            print("generated[0] shape:{}".format(generated[0].shape))
            plt.imshow(np.squeeze(generated[0]), cmap='gray')
            plt.show()