def tc_init(self, model_dir): self.tc_model = tclstm() self.X_input = tf.placeholder("float", [None, tcopts['time_steps'], tcopts['lstm_num_input']]) self.maps = tf.placeholder("float", [None, 19, 19, 1]) self.map_logits = self.tc_model.map_net(self.maps) self.Inputs = tf.concat((self.X_input, self.map_logits), axis=2) self.logits, _ = self.tc_model.net(self.Inputs) variables_to_restore = [var for var in tf.global_variables() if (var.name.startswith('tclstm') or var.name.startswith('mapnet'))] saver = tf.train.Saver(var_list=variables_to_restore) if self.p.checkpoint is None: checkpoint = tf.train.latest_checkpoint(os.path.join(base_path, 'DiMP_LTMU/meta_updater', model_dir)) else: checkpoint = os.path.join(base_path, 'DiMP_LTMU/meta_updater/' + self.p.model_dir + '/lstm_model.ckpt-' + str(self.p.checkpoint)) saver.restore(self.sess, checkpoint)
def tc_init(self, model_dir): self.tc_model = tclstm() self.tc_input = tf.placeholder( "float", [None, tcopts['time_steps'], tcopts['lstm_num_input']]) # self.tc_label = tf.placeholder("float", [None, tcopts['lstm_num_classes']]) self.tclogits = self.tc_model.net(self.tc_input) variables_to_restore = [ var for var in tf.global_variables() if (var.name.startswith('tclstm')) ] saver = tf.train.Saver(var_list=variables_to_restore) checkpoint = tf.train.latest_checkpoint( os.path.join('./meta_updater', model_dir)) # if checkpoint is not None: saver.restore(self.sess, checkpoint)
def tc_init(self, model_dir): self.tc_model = tclstm() self.X_input = tf.placeholder( "float", [None, tcopts['time_steps'], tcopts['lstm_num_input']]) self.maps = tf.placeholder("float", [None, 19, 19, 1]) self.map_logits = self.tc_model.map_net(self.maps) self.Inputs = tf.concat((self.X_input, self.map_logits), axis=2) self.logits, _ = self.tc_model.net(self.Inputs) variables_to_restore = [ var for var in tf.global_variables() if (var.name.startswith('tclstm') or var.name.startswith('mapnet')) ] saver = tf.train.Saver(var_list=variables_to_restore) checkpoint = tf.train.latest_checkpoint( os.path.join('./tracker_controller', model_dir)) # if checkpoint is not None: saver.restore(self.sess, checkpoint)
def train(): model = tclstm() training_steps = 50000 display_step = 200 with tf.device('cpu:0'): global_step = slim.create_global_step() # tf Graph input X = tf.placeholder( "float", [None, tcopts['time_steps'], tcopts['lstm_num_input']]) Y = tf.placeholder("float", [None, tcopts['lstm_num_classes']]) lrOp = tf.train.exponential_decay(tcopts['lstm_initial_lr'], global_step, tcopts['lstm_decay_steps'], tcopts['lr_decay_factor'], staircase=True) logits = model.net(X) # optimizer = tf.train.GradientDescentOptimizer(learning_rate=lrOp) optimizer = tf.train.MomentumOptimizer(learning_rate=lrOp, momentum=0.9) loss_op = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y)) prediction = tf.nn.softmax(logits) grads = optimizer.compute_gradients(loss_op) train_op = optimizer.apply_gradients(grads, global_step=global_step) # Evaluate model (with test logits, for dropout to be disabled) correct_pred = tf.equal(tf.argmax(prediction, 1), tf.argmax(Y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) test_accuracy = accuracy # Initialize the variables (i.e. assign their default value) init = tf.global_variables_initializer() pos_data, neg_data = load_training_data('pos_data.npy', 'neg_data.npy') test_pos_data, test_neg_data = load_training_data( 'test_pos_data.npy', 'test_neg_data.npy') test_pos_num, test_neg_num, test_batch_input, test_labels = get_test_batch_input( test_pos_data, test_neg_data) test_accuracy_pos = tf.reduce_mean( tf.cast(correct_pred[:test_pos_num], tf.float32)) test_accuracy_neg = tf.reduce_mean( tf.cast(correct_pred[test_pos_num:], tf.float32)) accuracy_pos = tf.reduce_mean( tf.cast(correct_pred[:tcopts['batch_size']], tf.float32)) accuracy_neg = tf.reduce_mean( tf.cast(correct_pred[tcopts['batch_size']:], tf.float32)) saver = tf.train.Saver(keep_checkpoint_every_n_hours=tcopts[ 'keep_checkpoint_every_n_hours']) # add summary tf.summary.scalar('learning_rate', lrOp) tf.summary.scalar('loss', loss_op) tf.summary.scalar('training_accuracy', accuracy) tf.summary.scalar('training_accuracy_pos', accuracy_pos) tf.summary.scalar('training_accuracy_neg', accuracy_neg) # grads for grad, var in grads: if grad is not None: tf.summary.histogram(var.op.name + '/gradients', grad) # # trainable var for var in tf.trainable_variables(): tf.summary.histogram(var.op.name, var) summary_op = tf.summary.merge_all() tf.summary.scalar('testing_accuracy_pos', test_accuracy_pos) tf.summary.scalar('testing_accuracy_neg', test_accuracy_neg) tf.summary.scalar('testing_accuracy', test_accuracy) test_merge_summary = tf.summary.merge( [tf.get_collection(tf.GraphKeys.SUMMARIES, 'testing_accuracy')]) summary_writer = tf.summary.FileWriter(tcopts['lstm_train_dir'], graph=tf.get_default_graph()) tfconfig = tf.ConfigProto() tfconfig.gpu_options.per_process_gpu_memory_fraction = 0.2 # Start training with tf.Session(config=tfconfig) as sess: # Run the initializer sess.run(init) checkpoint = tf.train.latest_checkpoint(tcopts['lstm_train_dir']) if checkpoint is not None: saver.restore(sess, checkpoint) while True: batch_input, labels = get_batch_input(pos_data, neg_data, 64) # Reshape data to get 28 seq of 28 elements # Run optimization op (backprop) _, g_step = sess.run([train_op, global_step], feed_dict={ X: batch_input[:, :, tcopts['lstm_input']], Y: labels }) if g_step % display_step == 0: # Calculate batch loss and accuracy loss, acc, acc_pos, acc_neg, summary_str = sess.run( [ loss_op, accuracy, accuracy_pos, accuracy_neg, summary_op ], feed_dict={ X: batch_input[:, :, tcopts['lstm_input']], Y: labels }) print("Step " + str(g_step) + ", Minibatch Loss= " + \ "{:.4f}".format(loss) + ", Training Accuracy= " + \ "{:.3f}".format(acc) + ", Accuracy pos= " + "{:.3f}".format( acc_pos) + ", Accuracy neg= " + "{:.3f}".format(acc_neg)) if g_step % tcopts['model_save_interval'] == 0: checkpoint_path = os.path.join(tcopts['lstm_train_dir'], 'lstm_model.ckpt') saver.save(sess, checkpoint_path, global_step=g_step) print('Save model, global step: %d' % g_step) if g_step % tcopts['eval_interval'] == 0: test_acc, test_acc_pos, test_acc_neg, test_summary_str = sess.run( [ test_accuracy, test_accuracy_pos, test_accuracy_neg, test_merge_summary ], feed_dict={ X: test_batch_input[:, :, tcopts['lstm_input']], Y: test_labels }) summary_writer.add_summary(test_summary_str, g_step) print("test accuracy:" + "{:.4f}".format(test_acc) + " test accuracy pos:" + "{:.4f}".format(test_acc_pos) + " test accuracy neg:" + "{:.4f}".format(test_acc_neg)) if test_acc_pos > tcopts[ 'save_pos_thr'] and test_acc_neg > tcopts[ 'save_neg_thr']: checkpoint_path = os.path.join( tcopts['lstm_train_dir'], 'lstm_model.ckpt') saver.save(sess, checkpoint_path, global_step=g_step) print('Save model, global step: %d' % g_step) if g_step % tcopts['summary_save_interval'] == 0: summary_writer.add_summary(summary_str, g_step) print('Save summary, global step: %d' % g_step)