training and evaluation stats are now logged by default to model/logs/
This commit is contained in:
parent
9bc1a8ba9f
commit
b07f075627
47
main.py
47
main.py
|
@ -1,17 +1,21 @@
|
|||
import argparse
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
|
||||
def print_train_outcome(outcome, trained_eps = 0):
|
||||
# Define helper functions
|
||||
def log_train_outcome(outcome, trained_eps = 0):
|
||||
format_vars = { 'trained_eps': trained_eps,
|
||||
'count': len(train_outcome),
|
||||
'sum': sum(train_outcome),
|
||||
'mean': sum(train_outcome) / len(train_outcome),
|
||||
'time': int(time.time())
|
||||
}
|
||||
print("train;{time};{trained_eps};{count};{sum};{mean}".format(**format_vars))
|
||||
with open(os.path.join(config['model_path'], 'logs', "train.log"), 'a+') as f:
|
||||
f.write("{time};{trained_eps};{count};{sum};{mean}".format(**format_vars) + "\n")
|
||||
|
||||
def print_eval_outcomes(outcomes, trained_eps = 0):
|
||||
|
||||
def log_eval_outcomes(outcomes, trained_eps = 0):
|
||||
for outcome in outcomes:
|
||||
scores = outcome[1]
|
||||
format_vars = { 'trained_eps': trained_eps,
|
||||
|
@ -21,8 +25,11 @@ def print_eval_outcomes(outcomes, trained_eps = 0):
|
|||
'mean': sum(scores) / len(scores),
|
||||
'time': int(time.time())
|
||||
}
|
||||
print("eval;{time};{method};{trained_eps};{count};{sum};{mean}".format(**format_vars))
|
||||
with open(os.path.join(config['model_path'], 'logs', "eval.log"), 'a+') as f:
|
||||
f.write("{time};{method};{trained_eps};{count};{sum};{mean}".format(**format_vars) + "\n")
|
||||
|
||||
|
||||
# Parse command line arguments
|
||||
parser = argparse.ArgumentParser(description="Backgammon games")
|
||||
parser.add_argument('--episodes', action='store', dest='episode_count',
|
||||
type=int, default=1000,
|
||||
|
@ -37,6 +44,8 @@ parser.add_argument('--eval', action='store_true',
|
|||
help='whether to evaluate the neural network with a random choice bot')
|
||||
parser.add_argument('--train', action='store_true',
|
||||
help='whether to train the neural network')
|
||||
parser.add_argument('--eval-after-train', action='store_true', dest='eval_after_train',
|
||||
help='whether to evaluate after each training session')
|
||||
parser.add_argument('--play', action='store_true',
|
||||
help='whether to play with the neural network')
|
||||
parser.add_argument('--start-episode', action='store', dest='start_episode',
|
||||
|
@ -52,33 +61,43 @@ config = {
|
|||
'train': args.train,
|
||||
'play': args.play,
|
||||
'eval': args.eval,
|
||||
'eval_after_train': args.eval_after_train,
|
||||
'start_episode': args.start_episode
|
||||
}
|
||||
|
||||
#print("-"*30)
|
||||
#print(type(args.eval_methods))
|
||||
#print(args.eval_methods)
|
||||
#print("-"*30)
|
||||
# Make sure directories exist
|
||||
model_path = os.path.join(config['model_path'])
|
||||
log_path = os.path.join(model_path, 'logs')
|
||||
if not os.path.isdir(model_path):
|
||||
os.mkdir(model_path)
|
||||
if not os.path.isdir(log_path):
|
||||
os.mkdir(log_path)
|
||||
|
||||
|
||||
# Set up game
|
||||
import game
|
||||
g = game.Game(config = config)
|
||||
g.set_up_bots()
|
||||
|
||||
episode_count = args.episode_count
|
||||
|
||||
# Set up variables
|
||||
episode_count = config['episode_count']
|
||||
|
||||
|
||||
# Do actions specified by command-line
|
||||
if args.train:
|
||||
eps = config['start_episode']
|
||||
while True:
|
||||
train_outcome = g.train_model(episodes = episode_count, trained_eps = eps)
|
||||
eps += episode_count
|
||||
print_train_outcome(train_outcome, trained_eps = eps)
|
||||
if args.eval:
|
||||
log_train_outcome(train_outcome, trained_eps = eps)
|
||||
if config['eval_after_train']:
|
||||
eval_outcomes = g.eval(trained_eps = eps)
|
||||
print_eval_outcomes(eval_outcomes, trained_eps = eps)
|
||||
sys.stdout.flush()
|
||||
log_eval_outcomes(eval_outcomes, trained_eps = eps)
|
||||
elif args.eval:
|
||||
eps = config['start_episode']
|
||||
outcomes = g.eval()
|
||||
print_eval_outcomes(outcomes, trained_eps = 0)
|
||||
log_eval_outcomes(outcomes, trained_eps = eps)
|
||||
#elif args.play:
|
||||
# g.play(episodes = episode_count)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user