示例#1
0
    def build(self, hp, inputs=None):
        inputs = nest.flatten(inputs)
        utils.validate_num_inputs(inputs, 1)
        input_node = inputs[0]
        output_node = input_node

        kernel_size = self.kernel_size or hp.Choice('kernel_size', [3, 5, 7],
                                                    default=3)
        num_blocks = self.num_blocks or hp.Choice('num_blocks', [1, 2, 3],
                                                  default=2)
        num_layers = self.num_layers or hp.Choice('num_layers', [1, 2],
                                                  default=2)
        separable = self.separable
        if separable is None:
            separable = hp.Boolean('separable', default=False)

        if separable:
            conv = utils.get_sep_conv(input_node.shape)
        else:
            conv = utils.get_conv(input_node.shape)

        max_pooling = self.max_pooling
        if max_pooling is None:
            max_pooling = hp.Boolean('max_pooling', default=True)
        pool = utils.get_max_pooling(input_node.shape)

        if self.dropout_rate is not None:
            dropout_rate = self.dropout_rate
        else:
            dropout_rate = hp.Choice('dropout_rate', [0.0, 0.25, 0.5],
                                     default=0)

        for i in range(num_blocks):
            for j in range(num_layers):
                output_node = conv(hp.Choice('filters_{i}_{j}'.format(i=i,
                                                                      j=j),
                                             [16, 32, 64, 128, 256, 512],
                                             default=32),
                                   kernel_size,
                                   padding=self._get_padding(
                                       kernel_size, output_node),
                                   activation='relu')(output_node)
            if max_pooling:
                output_node = pool(kernel_size - 1,
                                   padding=self._get_padding(
                                       kernel_size - 1,
                                       output_node))(output_node)
            if dropout_rate > 0:
                output_node = layers.Dropout(dropout_rate)(output_node)
        return output_node
示例#2
0
    def build(self, hp, inputs=None):
        inputs = nest.flatten(inputs)
        utils.validate_num_inputs(inputs, 1)
        input_node = inputs[0]
        output_node = input_node

        kernel_size = self.kernel_size or hp.Choice('kernel_size',
                                                    [3, 5, 7],
                                                    default=3)
        num_blocks = self.num_blocks or hp.Choice('num_blocks',
                                                  [1, 2, 3],
                                                  default=2)
        separable = self.separable
        if separable is None:
            separable = hp.Choice('separable', [True, False], default=False)

        if separable:
            conv = utils.get_sep_conv(input_node.shape)
        else:
            conv = utils.get_conv(input_node.shape)
        pool = utils.get_max_pooling(input_node.shape)

        for i in range(num_blocks):
            output_node = conv(
                hp.Choice('filters_{i}_1'.format(i=i),
                          [16, 32, 64],
                          default=32),
                kernel_size,
                padding=self._get_padding(kernel_size, output_node),
                activation='relu')(output_node)
            output_node = conv(
                hp.Choice('filters_{i}_2'.format(i=i),
                          [16, 32, 64],
                          default=32),
                kernel_size,
                padding=self._get_padding(kernel_size, output_node),
                activation='relu')(output_node)
            output_node = pool(
                kernel_size - 1,
                padding=self._get_padding(kernel_size - 1, output_node))(output_node)
        return output_node
示例#3
0
    def build(self, hp, inputs=None):
        inputs = nest.flatten(inputs)
        utils.validate_num_inputs(inputs, 1)
        input_node = inputs[0]
        output_node = input_node

        separable = self.separable
        if separable is None:
            separable = hp.Choice('separable', [True, False], default=False)
        if separable:
            conv = utils.get_sep_conv(input_node.shape)
        else:
            conv = utils.get_conv(input_node.shape)
        pool = utils.get_max_pooling(input_node.shape)
        dropout = utils.get_dropout(input_node.shape)
        kernel_size = hp.Choice('kernel_size', [3, 5, 7], default=3)
        dropout_rate = hp.Choice('dropout_rate', [0, 0.25, 0.5], default=0.5)

        for i in range(hp.Choice('num_blocks', [1, 2, 3], default=2)):
            if dropout_rate > 0:
                output_node = dropout(dropout_rate)(output_node)
            output_node = conv(hp.Choice('filters_{i}_1'.format(i=i),
                                         [16, 32, 64],
                                         default=32),
                               kernel_size,
                               padding=self._get_padding(
                                   kernel_size, output_node))(output_node)

            output_node = conv(hp.Choice('filters_{i}_2'.format(i=i),
                                         [16, 32, 64],
                                         default=32),
                               kernel_size,
                               padding=self._get_padding(
                                   kernel_size, output_node))(output_node)

            output_node = pool(kernel_size - 1,
                               padding=self._get_padding(
                                   kernel_size - 1, output_node))(output_node)
        return output_node