예제 #1
0
    def forward(self, inputs):
        """
        Forward process

        Parameters
        ----------
        inputs: Input tensor

        Returns
        -------
        outputs: Predictions of network, shape is (batch, num_classes).
            The outputs are called logits for classification net because the
            softmax activations are not applied in this forward process
        """
        use_bn = self.config.get('use_bn')
        block_filters = self.config.get('block_filters')
        block_conv_nums = self.config.get('block_conv_nums')

        outputs = inputs
        for i, filters in enumerate(block_filters):
            outputs = self.build_blocks(outputs, filters,
                                        block_conv_nums[i])

            if i != len(block_filters) - 1:
                outputs = maxpool(outputs, pool_size=2)
            else:
                outputs = global_average_pool(outputs)

        if use_bn:
            outputs = batch_normalization(outputs, training=self.training)

        outputs = dense(outputs, self.config.get('num_classes'))
        return outputs
예제 #2
0
    def forward(self, inputs):
        """
        Forward process

        Parameters
        ----------
        inputs: Input tensor

        Returns
        -------
        outputs: Predictions of network, shape is (batch, num_classes).
            The outputs are called logits for classification net because the
            softmax activations are not applied in this forward process
        """
        block_filters = self.config.get('block_filters')
        block_dense_nums = self.config.get('block_dense_nums')

        outputs = inputs
        for i, filters in enumerate(block_filters):
            first_blocks = i == 0
            growth_rate = self.config.get('growth_rates')[i]
            outputs = self.build_dense_blocks(outputs, filters,
                                              block_dense_nums[i], growth_rate,
                                              first_blocks)

            if i != len(block_filters) - 1:
                outputs = maxpool(outputs, pool_size=2)
            else:
                outputs = global_average_pool(outputs)

        outputs = dense(outputs, self.config.get('num_classes'))
        return outputs
예제 #3
0
    def forward(self, inputs):
        """
        Forward process

        Parameters
        ----------
        inputs: Input tensor
        """
        # encoder process
        outputs = inputs
        encoders = []
        for i, filters in enumerate(self.block_filters):
            first_blocks = i == 0
            outputs = self.build_res_blocks(outputs, filters,
                                            self.block_res_nums[i],
                                            first_blocks)

            if i != len(self.block_filters) - 1:
                encoders.append(outputs)
                outputs = maxpool(outputs, pool_size=2)

        # decoder process
        encoder_num = len(encoders)
        for k, encoder in enumerate(encoders[::-1]):
            i = encoder_num - k - 1
            first_blocks = i == 0
            filters = int(encoder.get_shape()[-1])
            outputs = conv_bn_relu(outputs,
                                   filters,
                                   3,
                                   1,
                                   1,
                                   use_bn=self.use_bn,
                                   training=self.training)
            outputs = upsample(outputs, 2, self.interpolation_type)
            outputs = concat([encoder, outputs])
            outputs = self.build_res_blocks(outputs, filters,
                                            self.block_res_nums[i],
                                            first_blocks)

        outputs = conv(outputs, self.config.get('output_channel'))
        outputs = softmax(outputs)
        return outputs