def __init__(self, global_net, summary_writer, global_steps_counter, args): self.env = make_env(args, record_video=args.record_video) self.global_net = global_net self.summary_writer = summary_writer self.global_steps_counter = global_steps_counter self.eval_every = args.eval_every self.eval_times = 0 self.eval_episodes = args.eval_episodes self.saver = tf.train.Saver(max_to_keep=5) self.model_dir = os.path.join(args.save_path, 'models/') if not os.path.exists(self.model_dir): os.makedirs(self.model_dir)
def main(args): if args.save_path is not None and not os.path.exists(args.save_path): os.makedirs(args.save_path) summary_writer = tf.summary.FileWriter(os.path.join(args.save_path, 'log')) global_steps_counter = itertools.count() # thread-safe global_net = Net(S_DIM, A_DIM, 'global', args) num_workers = args.threads workers = [] # create workers for i in range(1, num_workers + 1): worker_summary_writer = summary_writer if i == 0 else None worker = Worker(i, make_env(args), global_steps_counter, worker_summary_writer, args) workers.append(worker) saver = tf.train.Saver(max_to_keep=5) with tf.Session() as sess: coord = tf.train.Coordinator() if args.model_path is not None: print('Loading model...\n') ckpt = tf.train.get_checkpoint_state(args.model_path) saver.restore(sess, ckpt.model_checkpoint_path) else: print('Initializing a new model...\n') sess.run(tf.global_variables_initializer()) print_params_nums() # Start work process for each worker in a seperated thread worker_threads = [] for worker in workers: t = threading.Thread(target=lambda: worker.run(sess, coord, saver)) t.start() time.sleep(0.5) worker_threads.append(t) if args.eval_every > 0: evaluator = Evaluate(global_net, summary_writer, global_steps_counter, args) evaluate_thread = threading.Thread( target=lambda: evaluator.run(sess, coord)) evaluate_thread.start() coord.join(worker_threads)
def main(args): if args.save_path is not None and not os.path.exists(args.save_path): os.makedirs(args.save_path) summary_writer = tf.summary.FileWriter(os.path.join(args.save_path, 'log')) global_steps_counter = itertools.count() # thread-safe global_net = Net(S_DIM, A_DIM, 'global', args) num_workers = args.threads workers = [] # create workers for i in range(1, num_workers + 1): worker_summary_writer = summary_writer if i == 0 else None worker = Worker(i, make_env(args), global_steps_counter, worker_summary_writer, args) workers.append(worker) saver = tf.train.Saver(max_to_keep=5) with tf.Session() as sess: coord = tf.train.Coordinator() if args.model_path is not None: print('Loading model...\n') ckpt = tf.train.get_checkpoint_state(args.model_path) saver.restore(sess, ckpt.model_checkpoint_path) else: print('Initializing a new model...\n') sess.run(tf.global_variables_initializer()) print_params_nums() # Start work process for each worker in a seperated thread worker_threads = [] for worker in workers: t = threading.Thread(target=lambda: worker.run(sess, coord, saver)) t.start() time.sleep(0.5) worker_threads.append(t) if args.eval_every > 0: evaluator = Evaluate( global_net, summary_writer, global_steps_counter, args) evaluate_thread = threading.Thread( target=lambda: evaluator.run(sess, coord)) evaluate_thread.start() coord.join(worker_threads)