I'm new to python and tensorflow. I'm now testing Improved WGAN code from https://github.com/igul222/improved_wgan_trainingAfter adjusting the code to python 3.6, it still gives "NameError: name 'train_gen' is not defined" when I ran it, although there wasn't warning from pylint.
Can anyone help me with it?
The version of python I'm using is 3.6. There were many syntax differences from 2.7. I've already changed a lot to make it work. And I am running Tensorflow in a virtual environment. Still couldn't figure out this one.
import os, syssys.path.append(os.getcwd())import timeimport matplotlibmatplotlib.use('Agg')import matplotlib.pyplot as pltimport numpy as npimport sklearn.datasetsimport tensorflow as tfimport tflib as libimport tflib.ops.linearimport tflib.ops.conv2dimport tflib.ops.batchnormimport tflib.ops.deconv2dimport tflib.save_imagesimport tflib.mnistimport tflib.plotMODE = 'wgan-gp' # dcgan, wgan, or wgan-gpDIM = 64 # Model dimensionalityBATCH_SIZE = 50 # Batch sizeCRITIC_ITERS = 5 # For WGAN and WGAN-GP, number of critic iters per gen iterLAMBDA = 10 # Gradient penalty lambda hyperparameterITERS = 200000 # How many generator iterations to train for OUTPUT_DIM = 784 # Number of pixels in MNIST (28*28)lib.print_model_settings(locals().copy())def LeakyReLU(x, alpha=0.2): return tf.maximum(alpha*x, x)def ReLULayer(name, n_in, n_out, inputs): output = lib.ops.linear.Linear( name+'.Linear', n_in, n_out, inputs, initialization='he' ) return tf.nn.relu(output)def LeakyReLULayer(name, n_in, n_out, inputs): output = lib.ops.linear.Linear( name+'.Linear', n_in, n_out, inputs, initialization='he' ) return LeakyReLU(output)def Generator(n_samples, noise=None): if noise is None: noise = tf.random_normal([n_samples, 128]) output = lib.ops.linear.Linear('Generator.Input', 128, 4*4*4*DIM, noise) if MODE == 'wgan': output = lib.ops.batchnorm.Batchnorm('Generator.BN1', [0], output) output = tf.nn.relu(output) output = tf.reshape(output, [-1, 4*DIM, 4, 4]) output = lib.ops.deconv2d.Deconv2D('Generator.2', 4*DIM, 2*DIM, 5, output) if MODE == 'wgan': output = lib.ops.batchnorm.Batchnorm('Generator.BN2', [0,2,3], output) output = tf.nn.relu(output) output = output[:,:,:7,:7] output = lib.ops.deconv2d.Deconv2D('Generator.3', 2*DIM, DIM, 5, output) if MODE == 'wgan': output = lib.ops.batchnorm.Batchnorm('Generator.BN3', [0,2,3], output) output = tf.nn.relu(output) output = lib.ops.deconv2d.Deconv2D('Generator.5', DIM, 1, 5, output) output = tf.nn.sigmoid(output) return tf.reshape(output, [-1, OUTPUT_DIM])def Discriminator(inputs): output = tf.reshape(inputs, [-1, 1, 28, 28]) output = lib.ops.conv2d.Conv2D('Discriminator.1',1,DIM,5,output,stride=2) output = LeakyReLU(output) output = lib.ops.conv2d.Conv2D('Discriminator.2', DIM, 2*DIM, 5, output, stride=2) if MODE == 'wgan': output = lib.ops.batchnorm.Batchnorm('Discriminator.BN2', [0,2,3], output) output = LeakyReLU(output) output = lib.ops.conv2d.Conv2D('Discriminator.3', 2*DIM, 4*DIM, 5, output, stride=2) if MODE == 'wgan': output = lib.ops.batchnorm.Batchnorm('Discriminator.BN3', [0,2,3], output) output = LeakyReLU(output) output = tf.reshape(output, [-1, 4*4*4*DIM]) output = lib.ops.linear.Linear('Discriminator.Output', 4*4*4*DIM, 1, output) return tf.reshape(output, [-1])real_data = tf.placeholder(tf.float32, shape=[BATCH_SIZE, OUTPUT_DIM])fake_data = Generator(BATCH_SIZE)disc_real = Discriminator(real_data)disc_fake = Discriminator(fake_data)gen_params = lib.params_with_name('Generator')disc_params = lib.params_with_name('Discriminator')if MODE == 'wgan': gen_cost = -tf.reduce_mean(disc_fake) disc_cost = tf.reduce_mean(disc_fake) - tf.reduce_mean(disc_real) gen_train_op = tf.train.RMSPropOptimizer( learning_rate=5e-5 ).minimize(gen_cost, var_list=gen_params) disc_train_op = tf.train.RMSPropOptimizer( learning_rate=5e-5 ).minimize(disc_cost, var_list=disc_params) clip_ops = [] for var in lib.params_with_name('Discriminator'): clip_bounds = [-.01, .01] clip_ops.append( tf.assign( var, tf.clip_by_value(var, clip_bounds[0], clip_bounds[1]) ) ) clip_disc_weights = tf.group(*clip_ops)elif MODE == 'wgan-gp': gen_cost = -tf.reduce_mean(disc_fake) disc_cost = tf.reduce_mean(disc_fake) - tf.reduce_mean(disc_real) alpha = tf.random_uniform( shape=[BATCH_SIZE,1], minval=0., maxval=1. ) differences = fake_data - real_data interpolates = real_data + (alpha*differences) gradients = tf.gradients(Discriminator(interpolates), [interpolates])[0] slopes = tf.sqrt(tf.reduce_sum(tf.square(gradients), reduction_indices=[1])) gradient_penalty = tf.reduce_mean((slopes-1.)**2) disc_cost += LAMBDA*gradient_penalty gen_train_op = tf.train.AdamOptimizer( learning_rate=1e-4, beta1=0.5, beta2=0.9 ).minimize(gen_cost, var_list=gen_params) disc_train_op = tf.train.AdamOptimizer( learning_rate=1e-4, beta1=0.5, beta2=0.9 ).minimize(disc_cost, var_list=disc_params) clip_disc_weights = Noneelif MODE == 'dcgan': gen_cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits( disc_fake, tf.ones_like(disc_fake) )) disc_cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits( disc_fake, tf.zeros_like(disc_fake) )) disc_cost += tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits( disc_real, tf.ones_like(disc_real) )) disc_cost /= 2. gen_train_op = tf.train.AdamOptimizer( learning_rate=2e-4, beta1=0.5 ).minimize(gen_cost, var_list=gen_params) disc_train_op = tf.train.AdamOptimizer( learning_rate=2e-4, beta1=0.5 ).minimize(disc_cost, var_list=disc_params) clip_disc_weights = None# For saving samplesfixed_noise = tf.constant(np.random.normal(size=(128, 128)).astype('float32'))fixed_noise_samples = Generator(128, noise=fixed_noise)def generate_image(frame, true_dist): samples = session.run(fixed_noise_samples) lib.save_images.save_images( samples.reshape((128, 28, 28)), 'samples_{}.png'.format(frame) )# Dataset iteratortrain_gen, dev_gen, test_gen = lib.mnist.load(BATCH_SIZE, BATCH_SIZE)def inf_train_gen(): while True: for images, targets in train_gen(): yield images# Train loopwith tf.Session() as session: session.run(tf.initialize_all_variables()) gen = inf_train_gen() for iteration in range(ITERS): start_time = time.time() if iteration > 0: _ = session.run(gen_train_op) if MODE == 'dcgan': disc_iters = 1 else: disc_iters = CRITIC_ITERS for i in range(disc_iters): _data = gen.__next__() _disc_cost, _ = session.run( [disc_cost, disc_train_op], feed_dict={real_data: _data} ) if clip_disc_weights is not None: _ = session.run(clip_disc_weights) lib.plot.plot('train disc cost', _disc_cost) lib.plot.plot('time', time.time() - start_time) # Calculate dev loss and generate samples every 100 iters if iteration % 100 == 99: dev_disc_costs = [] for images,_ in dev_gen(): _dev_disc_cost = session.run( disc_cost, feed_dict={real_data: images} ) dev_disc_costs.append(_dev_disc_cost) lib.plot.plot('dev disc cost', np.mean(dev_disc_costs)) generate_image(iteration, _data) # Write logs every 100 iters if (iteration < 5) or (iteration % 100 == 99): lib.plot.flush() lib.plot.tick()This is the section containing the error name.
# Dataset iterator train_gen, dev_gen, test_gen = lib.mnist.load(BATCH_SIZE, BATCH_SIZE)def inf_train_gen(): while True: for images, targets in train_gen(): yield imagesAnd here is the error.
Traceback (most recent call last): File "<stdin>", line 13, in <module> File "<stdin>", line 3, in inf_train_genNameError: name 'train_gen' is not defined