Ejemplo n.º 1
0
    def __init__(self, model):
        if model is None:  #create new model
            # init
            garbage = GameState()
            shape = garbage.board.shape
            output_size = garbage.action_size()
            del garbage

            # Neural net
            input_board = Input(shape=shape)
            input_board_reshaped = Reshape(
                (shape[0], shape[1], 1))(input_board)

            conv1 = Activation('relu')(BatchNormalization(axis=3)(
                Conv2D(nnet_args.filters, (4, 4),
                       padding='same')(input_board_reshaped)))
            conv2 = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.filters, (3, 3), padding='same')(conv1)))
            conv3 = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.filters, (3, 3), padding='same')(conv2)))
            conv4 = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.filters, (3, 3), padding='same')(conv3)))

            #conv4 -> pi
            conv_pi = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.pi_filters, (1, 1))(conv4)))
            conv_pi_flat = Flatten()(conv_pi)
            pi = Dense(output_size, activation='softmax',
                       name='pi')(conv_pi_flat)

            #conv4 -> v
            conv_v = Activation('relu')(BatchNormalization(axis=3)(Conv2D(
                nnet_args.v_filters, (1, 1))(conv4)))
            conv_v_flat = Flatten()(conv_v)
            hidden_v = Dense(nnet_args.hidden_dense,
                             activation='relu')(conv_v_flat)
            v = Dense(1, activation='sigmoid', name='v')(hidden_v)

            self.model = Model(inputs=input_board, outputs=[pi, v])
            self.model.compile(
                loss=['categorical_crossentropy', 'mean_squared_error'],
                optimizer=Adam(nnet_args.lr))  #maybe todo loss function

        else:
            self.model = load_model(global_args.save_dir + str(model) + '.h5')