Exemplo n.º 1
0
    def residual_layer(self, initial_input):
        # Residual layer as defined in literature
        output_1 = Conv2D(filters=Param.FILTER_PER_LAYER,
                          kernel_size=Param.FILTER_KERNEL_SIZE,
                          data_format="channels_first",
                          padding='same',
                          use_bias=False,
                          activation='linear',
                          kernel_regularizer=regularizers.l2(
                              Param.L2_REG_CONST))(initial_input)

        output_2 = BN(axis=1)(output_1)

        output_3 = LR()(output_2)

        output_4 = Conv2D(filters=Param.FILTER_PER_LAYER,
                          kernel_size=Param.FILTER_KERNEL_SIZE,
                          data_format="channels_first",
                          padding='same',
                          use_bias=False,
                          activation='linear',
                          kernel_regularizer=regularizers.l2(
                              Param.L2_REG_CONST))(output_3)

        output_5 = BN(axis=1)(output_4)

        output_6 = add([initial_input, output_5])

        final_output = LR()(output_6)

        return final_output
Exemplo n.º 2
0
    def value_head(self, initial_input):
        # Value head as defined in literature
        output_1 = Conv2D(
            filters=1,
            kernel_size=(1, 1),  # 1x1 convolution
            data_format="channels_first",
            padding='same',
            use_bias=False,
            activation='linear',
            kernel_regularizer=regularizers.l2(
                Param.L2_REG_CONST))(initial_input)

        output_2 = BN(axis=1)(output_1)

        output_3 = LR()(output_2)

        output_4 = Flatten()(output_3)

        output_5 = Dense(
            Param.
            FILTER_PER_LAYER,  # Use same convention of having the same number of nodes here as filter layers
            use_bias=False,
            activation='linear',
            kernel_regularizer=regularizers.l2(Param.L2_REG_CONST))(output_4)

        output_6 = LR()(output_5)

        final_output = Dense(1,
                             use_bias=False,
                             activation='tanh',
                             kernel_regularizer=regularizers.l2(
                                 Param.L2_REG_CONST),
                             name='value_head')(output_6)

        return final_output
Exemplo n.º 3
0
    def residual_layer(self, initial_input):

        output_1 = Dense(hive_command.RES_LAYER_NODE_COUNT,
                         use_bias=False,
                         activation='sigmoid',
                         kernel_regularizer=regularizers.l2(
                             hive_command.L2_REG_CONST))(initial_input)

        output_2 = BN(axis=1)(output_1)

        output_3 = LR()(output_2)

        output_4 = Dense(hive_command.RES_LAYER_NODE_COUNT,
                         use_bias=False,
                         activation='sigmoid',
                         kernel_regularizer=regularizers.l2(
                             hive_command.L2_REG_CONST))(output_3)

        output_5 = BN(axis=1)(output_4)

        output_6 = add([initial_input, output_5])

        final_output = LR()(output_6)

        return final_output
Exemplo n.º 4
0
    def policy_head(self, initial_input):
        # Policy head as defined in literature
        output_1 = Conv2D(
            filters=2,
            kernel_size=(1, 1),  # 1x1 convolution
            data_format="channels_first",
            padding='same',
            use_bias=False,
            activation='linear',
            kernel_regularizer=regularizers.l2(Param.L2_REG_CONST),
            kernel_initializer='random_uniform')(initial_input)

        output_2 = BN(axis=1)(output_1)

        output_3 = LR()(output_2)

        output_4 = Flatten()(output_3)

        final_output = Dense(
            361,  # 19 * 19,
            use_bias=False,
            activation='linear',
            kernel_regularizer=regularizers.l2(Param.L2_REG_CONST),
            name='policy_head')(output_4)

        return final_output
Exemplo n.º 5
0
    def fertilize(self):

        initial_input = Input(hive_command.INPUT_DIM)

        output_1 = Dense(
            128,
            use_bias=False,
            activation='sigmoid',
            kernel_regularizer=regularizers.l2(hive_command.L2_REG_CONST),
        )(initial_input)

        output_2 = Dense(
            hive_command.RES_LAYER_NODE_COUNT,
            use_bias=False,
            activation='sigmoid',
            kernel_regularizer=regularizers.l2(hive_command.L2_REG_CONST),
        )(output_1)

        output_3 = BN(axis=1)(output_2)

        res_input = LR()(output_3)
        res_output = res_input

        for i in range(0, hive_command.RES_LAYER_COUNT):
            res_output = self.residual_layer(res_input)
            res_input = res_output

        policy = Dense(11,
                       use_bias=False,
                       activation='linear',
                       kernel_regularizer=regularizers.l2(
                           hive_command.L2_REG_CONST),
                       name='policy')(res_output)

        model = Model(inputs=[initial_input], outputs=[policy])

        model.compile(
            loss='mean_squared_error',
            optimizer=Adam(lr=hive_command.INITIAL_LEARNING_RATE,
                           beta_1=0.9,
                           beta_2=0.999,
                           epsilon=10E-8),
        )

        return model
Exemplo n.º 6
0
    def build_model(self):
        # This function constructs the model
        initial_input = Input(Param.INPUT_DIM)

        output_1 = Conv2D(filters=Param.FILTER_PER_LAYER,
                          kernel_size=Param.FILTER_KERNEL_SIZE,
                          data_format="channels_first",
                          padding='same',
                          use_bias=False,
                          activation='linear',
                          kernel_regularizer=regularizers.l2(
                              Param.L2_REG_CONST))(initial_input)

        output_2 = BN(axis=1)(output_1)

        res_input = LR()(output_2)
        res_output = res_input  # Initialize res_output

        # Add residual layers
        for i in range(0, Param.RES_LAYER_COUNT):
            res_output = self.residual_layer(res_input)
            res_input = res_output

        value = self.value_head(res_output)
        policy = self.policy_head(res_output)
        model = Model(inputs=[initial_input], outputs=[value, policy])

        # The fit method uses the Adam optimizer because SGD tends to cause the loss function to become unstable
        # (nans during training), and overall Adam performs better than SGD.
        model.compile(loss={
            'value_head': 'mean_squared_error',
            'policy_head': loss_function
        },
                      optimizer=Adam(lr=Param.INITIAL_LEARNING_RATE,
                                     beta_1=0.9,
                                     beta_2=0.999,
                                     epsilon=10E-8),
                      loss_weights={
                          'value_head': 0.5,
                          'policy_head': 0.5
                      })

        return model