def train(self, x, y, x_valid, y_valid, epochs, num_batches, print_every=1, learning_rate=3e-4, beta1=0.9, beta2=0.999, seed=31415, stop_iter=100, save_path=None, load_path=None): self.num_examples = x.shape[0] self.num_batches = num_batches assert self.num_examples % self.num_batches == 0, '#Examples % #Batches != 0' self.batch_size = self.num_examples // self.num_batches ''' Session and Summary ''' self.save_path = save_path if save_path is None: self.save_ckpt_path = 'checkpoints/model_VAE_{}-{}_{}.cpkt'.format( learning_rate, self.batch_size, time.time()) else: self.save_ckpt_path = save_path + 'model_VAE_{}-{}_{}.cpkt'.format( learning_rate, self.batch_size, time.time()) np.random.seed(seed) tf.set_random_seed(seed) with self.G.as_default(): self.optimizer_origin = tf.train.AdamOptimizer( learning_rate=learning_rate, beta1=beta1, beta2=beta2) self.optimizer = tf.contrib.estimator.clip_gradients_by_norm( self.optimizer_origin, clip_norm=1.0) self.train_op = self.optimizer.minimize(self.cost) init = tf.global_variables_initializer() self._test_vars = None with self.session as sess: sess.run(init) if load_path == 'default': full_path = tf.train.latest_checkpoint(self.save_path) print('restore model from {}'.format(full_path)) self.saver.restore(sess, full_path) elif load_path is not None: full_path = tf.train.latest_checkpoint(load_path) print('restore model from {}'.format(full_path)) self.saver.restore(sess, full_path) training_cost = 0. best_eval_log_lik = -np.inf best_mse = np.inf stop_counter = 0 for epoch in range(epochs): # TODO create shuffle Data ''' Training ''' for x_batch, y_batch in utils.feed_numpy( self.batch_size, x, y): training_result = sess.run([self.train_op, self.cost], feed_dict={ self.x: x_batch, self.y: y_batch }) training_cost = training_result[1] ''' Evaluation ''' stop_counter += 1 if epoch % print_every == 0: test_vars = tf.get_collection( bookkeeper.GraphKeys.TEST_VARIABLES) if test_vars: if test_vars != self._test_vars: self._test_vars = list(test_vars) self._test_var_init_op = tf.initialize_variables( test_vars) self._test_var_init_op.run() mse = sess.run(self.mse_loss, feed_dict={ self.x: x, self.y: y }) # corr_loss = self.corr_loss.eval(feed_dict={self.x: x, self.y: y}) if mse < best_mse: best_eval_log_lik = mse self.saver.save(sess, self.save_ckpt_path) stop_counter = 0 utils.print_metrics( epoch + 1, ['Training', 'cost', training_cost], # ['AutoCorr', 'train', corr_loss], ['MSE ', 'train', mse]) if stop_counter >= stop_iter: print( 'Stopping No change in validation log-likelihood for {} iterations' .format(stop_iter)) print('Best validation log-likelihood: {}'.format( best_eval_log_lik)) print('Model saved in {}'.format(self.save_path)) break
def train( self, x, x_valid, epochs, num_batches, print_every = 1, learning_rate = 3e-4, beta1 = 0.9, beta2 = 0.999, seed = 31415, stop_iter = 100, save_path = None, load_path = None, draw_img = 1 ): self.num_examples = x.shape[0] self.num_batches = num_batches assert self.num_examples % self.num_batches == 0, '#Examples % #Batches != 0' self.batch_size = self.num_examples // self.num_batches ''' Session and Summary ''' if save_path is None: self.save_path = 'checkpoints/model_VAE_{}-{}_{}.cpkt'.format(learning_rate,self.batch_size,time.time()) else: self.save_path = save_path np.random.seed(seed) tf.set_random_seed(seed) with self.G.as_default(): self.optimiser = tf.train.AdamOptimizer( learning_rate = learning_rate, beta1 = beta1, beta2 = beta2 ) self.train_op = self.optimiser.minimize( self.cost ) init = tf.initialize_all_variables() self._test_vars = None with self.session as sess: sess.run(init) if load_path == 'default': self.saver.restore( sess, self.save_path ) elif load_path is not None: self.saver.restore( sess, load_path ) training_cost = 0. best_eval_log_lik = - np.inf stop_counter = 0 for epoch in range(epochs): ''' Shuffle Data ''' np.random.shuffle( x ) ''' Training ''' for x_batch in utils.feed_numpy( self.batch_size, x ): training_result = sess.run( [self.train_op, self.cost], feed_dict = { self.x: x_batch } ) training_cost = training_result[1] ''' Evaluation ''' stop_counter += 1 if epoch % print_every == 0: test_vars = tf.get_collection(bookkeeper.GraphKeys.TEST_VARIABLES) if test_vars: if test_vars != self._test_vars: self._test_vars = list(test_vars) self._test_var_init_op = tf.initialize_variables(test_vars) self._test_var_init_op.run() eval_log_lik, x_recon_eval = \ sess.run( [self.eval_log_lik, self.x_recon_eval], feed_dict = { self.x: x_valid } ) if eval_log_lik > best_eval_log_lik: best_eval_log_lik = eval_log_lik self.saver.save( sess, self.save_path ) stop_counter = 0 utils.print_metrics( epoch+1, ['Training', 'cost', training_cost], ['Validation', 'log-likelihood', eval_log_lik] ) if draw_img > 0 and epoch % draw_img == 0: import matplotlib matplotlib.use('Agg') import pylab import seaborn as sns five_random = np.random.random_integers(x_valid.shape[0], size = 5) x_sample = x_valid[five_random] x_recon_sample = x_recon_eval[five_random] sns.set_style('white') f, axes = pylab.subplots(5, 2, figsize=(8,12)) for i,row in enumerate(axes): row[0].imshow(x_sample[i].reshape(28, 28), vmin=0, vmax=1) im = row[1].imshow(x_recon_sample[i].reshape(28, 28), vmin=0, vmax=1, cmap=sns.light_palette((1.0, 0.4980, 0.0549), input="rgb", as_cmap=True)) pylab.setp([a.get_xticklabels() for a in row], visible=False) pylab.setp([a.get_yticklabels() for a in row], visible=False) f.subplots_adjust(left=0.0, right=0.9, bottom=0.0, top=1.0) cbar_ax = f.add_axes([0.9, 0.1, 0.04, 0.8]) f.colorbar(im, cax=cbar_ax, use_gridspec=True) pylab.tight_layout() pylab.savefig('img/recon-'+str(epoch)+'.png', format='png') pylab.clf() pylab.close('all') if stop_counter >= stop_iter: print('Stopping VAE training') print('No change in validation log-likelihood for {} iterations'.format(stop_iter)) print('Best validation log-likelihood: {}'.format(best_eval_log_lik)) print('Model saved in {}'.format(self.save_path)) break
def train(self, x, x_valid, epochs, num_batches, print_every=1, learning_rate=3e-4, beta1=0.9, beta2=0.999, seed=31415, stop_iter=100, save_path=None, load_path=None, draw_img=1): self.num_examples = x.shape[0] self.num_batches = num_batches print("Num examples: {}".format(self.num_examples)) assert self.num_examples % self.num_batches == 0, '#Examples % #Batches != 0' self.batch_size = self.num_examples // self.num_batches ''' Session and Summary ''' if save_path is None: self.save_path = 'checkpoints/model_VAE_{}-{}_{}.cpkt'.format( learning_rate, self.batch_size, time.time()) else: self.save_path = save_path np.random.seed(seed) tf.set_random_seed(seed) with self.G.as_default(): self.optimiser = tf.train.AdamOptimizer( learning_rate=learning_rate, beta1=beta1, beta2=beta2) self.train_op = self.optimiser.minimize(self.cost) init = tf.global_variables_initializer() self._test_vars = None with self.session as sess: sess.run(init) if load_path == 'default': self.saver.restore(sess, self.save_path) elif load_path is not None: self.saver.restore(sess, load_path) training_cost = 0. best_eval_log_lik = -np.inf stop_counter = 0 for epoch in range(epochs): ''' Shuffle Data ''' np.random.shuffle(x) ''' Training ''' for x_batch in utils.feed_numpy(self.batch_size, x): training_result = sess.run([self.train_op, self.cost], feed_dict={self.x: x_batch}) training_cost = training_result[1] ''' Evaluation ''' stop_counter += 1 if epoch % print_every == 0: test_vars = tf.get_collection( bookkeeper.GraphKeys.TEST_VARIABLES) if test_vars: if test_vars != self._test_vars: self._test_vars = list(test_vars) self._test_var_init_op = tf.initialize_variables( test_vars) self._test_var_init_op.run() eval_log_lik, x_recon_eval = \ sess.run( [self.eval_log_lik, self.x_recon_eval], feed_dict = { self.x: x_valid } ) if eval_log_lik > best_eval_log_lik: print('Saving') best_eval_log_lik = eval_log_lik self.saver.save(sess, self.save_path) stop_counter = 0 utils.print_metrics( epoch + 1, ['Training', 'cost', training_cost], ['Validation', 'log-likelihood', eval_log_lik]) if draw_img > 0 and epoch % draw_img == 0: import matplotlib matplotlib.use('Agg') import pylab import seaborn as sns five_random = np.random.random_integers( x_valid.shape[0], size=5) x_sample = x_valid[five_random] x_recon_sample = x_recon_eval[five_random] sns.set_style('white') f, axes = pylab.subplots(5, 2, figsize=(8, 12)) for i, row in enumerate(axes): row[0].imshow(x_sample[i].reshape(28, 28), vmin=0, vmax=1) im = row[1].imshow(x_recon_sample[i].reshape( 28, 28), vmin=0, vmax=1, cmap=sns.light_palette( (1.0, 0.4980, 0.0549), input="rgb", as_cmap=True)) pylab.setp([a.get_xticklabels() for a in row], visible=False) pylab.setp([a.get_yticklabels() for a in row], visible=False) f.subplots_adjust(left=0.0, right=0.9, bottom=0.0, top=1.0) cbar_ax = f.add_axes([0.9, 0.1, 0.04, 0.8]) f.colorbar(im, cax=cbar_ax, use_gridspec=True) pylab.tight_layout() pylab.savefig('img/recon-' + str(epoch) + '.png', format='png') pylab.clf() pylab.close('all') if stop_counter >= stop_iter: print('Stopping VAE training') print( 'No change in validation log-likelihood for {} iterations' .format(stop_iter)) print('Best validation log-likelihood: {}'.format( best_eval_log_lik)) print('Model saved in {}'.format(self.save_path)) break
def train(self, x, x_con, x_valid, x_con_valid, params, y_one_hot_train=None, y_one_hot_valid=None, save_path=None, load_path=None ): stop_iter = self.params.stop_iter N, M = params.n_batch, params.batch_size lr, seed, epochs, print_every = params.learning_rate, params.seed, params.epochs, params.print_every ''' Session and Summary ''' self.save_path = save_path if save_path is None: self.save_ckpt_path = 'checkpoints/model_VAE_{}-{}_{}.cpkt'.format(lr, M, time.time()) else: self.save_ckpt_path = save_path + 'model_VAE_{}-{}_{}.cpkt'.format(lr, M, time.time()) np.random.seed(seed) tf.set_random_seed(seed) with self.G.as_default(): self.optimizer_origin = tf.train.AdamOptimizer(learning_rate=lr) self.optimizer = tf.contrib.estimator.clip_gradients_by_norm(self.optimizer_origin, clip_norm=1.0) self.train_op = self.optimizer.minimize(self.cost) self.init_g = tf.global_variables_initializer() self.init_l = tf.local_variables_initializer() self._test_vars = None with self.session as sess: sess.run(self.init_g) sess.run(self.init_l) if load_path == 'default': full_path = tf.train.latest_checkpoint(self.save_path) print('restore model from {}'.format(full_path)) self.saver.restore(sess, full_path) elif load_path is not None: full_path = tf.train.latest_checkpoint(load_path) print('restore model from {}'.format(full_path)) self.saver.restore(sess, full_path) best_eval_log_lik = - np.inf best_mse = np.inf stop_counter = 0 for epoch in range(epochs): # TODO create shuffle Data # X_train_shuffle, X_tau_train_shuffle, y_classify_train_shuffle = shuffle_data(X_train, X_tau_train, y_classify_train) ''' Training ''' training_cost, accuracy, mse = 0, 0, 0 for x_batch, x_con_batch, y_one_hot_batch in utils.feed_numpy(x, x_con, batch_size=M, y=y_one_hot_train): training_result = sess.run([self.train_op, self.cost, self.accuracy, self.mse_loss], feed_dict={self.x: x_batch, self.x_con: x_con_batch, self.y_one_hot: y_one_hot_batch}) training_cost += training_result[1] accuracy += training_result[2] mse += training_result[3] training_cost, accuracy, mse = training_cost / N, accuracy / N, mse / N ''' Evaluation ''' stop_counter += 1 if epoch % print_every == 0: # mse = sess.run(self.mse_loss, feed_dict={self.x: x, self.x_con: x_con}) val_result = sess.run(self.accuracy, feed_dict={self.x: x_valid, self.x_con: x_con_valid, self.y_one_hot: y_one_hot_valid}) if mse < best_mse: best_eval_log_lik = mse self.saver.save(sess, self.save_ckpt_path) stop_counter = 0 utils.print_metrics(epoch + 1, ['Training cost', training_cost], ['Accuracy', accuracy], ['MSE', mse], ['Validation accuracy', val_result] ) if stop_counter >= stop_iter: print('Stopping No change in validation log-likelihood for {} iterations'.format(stop_iter)) print('Best validation log-likelihood: {}'.format(best_eval_log_lik)) print('Model saved in {}'.format(self.save_path)) break