def __init__(self, training_set, topology, lr, epochs, batch_size, activation_functions): self.training_set = training_set self.topology = topology self.lr = lr self.epochs = epochs self.batch_size = batch_size self.activation_functions = activation_functions self.train_boards = None self.train_moves = None # Different number of in nodes because of different test set if self.training_set == 1: self.input = 16 elif self.training_set == 2: self.input = 16 elif self.training_set == 3: self.input = 19 elif self.training_set == 4: self.input = 22 elif self.training_set == 5: self.input = 29 self.net = ANN(self.input, self.topology, activation_functions, 4, lr)
class NNplayer(object): # Initialises values and takes parameters from user def __init__(self, training_set, topology, lr, epochs, batch_size, activation_functions): self.training_set = training_set self.topology = topology self.lr = lr self.epochs = epochs self.batch_size = batch_size self.activation_functions = activation_functions self.train_boards = None self.train_moves = None # Different number of in nodes because of different test set if self.training_set == 1: self.input = 16 elif self.training_set == 2: self.input = 16 elif self.training_set == 3: self.input = 19 elif self.training_set == 4: self.input = 22 elif self.training_set == 5: self.input = 29 self.net = ANN(self.input, self.topology, activation_functions, 4, lr) # Loads the different test cases and scales the ones that have not been scaled when they were made def load_test_cases(self): if self.training_set == 1: f = open("myfile1.txt", "r") elif self.training_set == 2: f = open("Gradient16dim.txt", "r") elif self.training_set == 3: f = open("Gradient19dim.txt", "r") elif self.training_set == 4: f = open("Gradient22dim.txt", "r") elif self.training_set == 5: f = open("Gradient30dim.txt", "r") boards = [] moves = [] lines = f.readlines() for line in lines: case = line.split("$") board = case[0] move = case[1] board = board.split(",") move = move.strip("\n").split(",") boards.append(board) moves.append(move) boards = np.asarray(boards, dtype=np.double) if self.training_set < 3: scale(boards) moves = np.array(moves) # Sets assignes the set to the objects variables self.train_boards = boards self.train_moves = moves # Trains batches of size "minibatch_size" for x epochs. def train_model(self, epochs, minibatch_size): for epoch in range(epochs): print("Training epoch number {}...".format(epoch)) cost = 0 for i in range(0, len(self.train_boards), minibatch_size): board_batch = self.train_boards[i : i + minibatch_size] move_batch = self.train_moves[i : i + minibatch_size] cost += self.net.train(board_batch, move_batch) print("Cost after epoch {}: {}".format(epoch, cost / len(self.train_boards)))