示例#1
0
    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)
示例#2
0
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)))