예제 #1
0
파일: LeNet.py 프로젝트: iiharu/NN
    def build(self, input_shape=(28, 28, 1), classes=10):
        inputs = keras.Input(shape=input_shape)

        outputs = conv2d(filters=6, kernel_size=(6, 6))(inputs)
        outputs = max_pooling2d(pool_size=(2, 2), strides=(2, 2))(outputs)
        outputs = sigmoid()(outputs)

        outputs = conv2d(filters=16, kernel_size=(6, 6))(inputs)
        outputs = max_pooling2d(pool_size=(2, 2), strides=(2, 2))(outputs)
        outputs = sigmoid()(outputs)

        outputs = flatten()(outputs)

        outputs = dense(120)(outputs)
        outputs = sigmoid()(outputs)

        outputs = dense(64)(outputs)
        outputs = sigmoid()(outputs)

        outputs = dense(classes)(outputs)
        outputs = softmax()(outputs)

        model = keras.Model(inputs, outputs)

        model.summary()

        return model
예제 #2
0
파일: GoogLeNet.py 프로젝트: iiharu/NN
    def __init__(self,
                 input_layers=None,
                 outputs_layers=None,
                 inception_layers=None):
        self.inception_version = 1
        if input_layers is None:
            self.input_layers = [
                conv2d(filters=64,
                       kernel_size=(7, 7),
                       strides=2,
                       padding='same'),
                max_pooling2d(pool_size=(3, 3), strides=2, padding='same'),
                batch_normalization(),
                conv2d(filters=192,
                       kernel_size=(1, 1),
                       strides=1,
                       padding='valid'),
                conv2d(filters=192,
                       kernel_size=(3, 3),
                       strides=1,
                       padding='same'),
                batch_normalization(),
                max_pooling2d(pool_size=(3, 3), strides=2, padding='same')
            ]
        else:
            self.input_layers = input_layers

        if outputs_layers is None:
            self.output_layers = [
                average_pooling2d(pool_size=(7, 7), strides=1,
                                  padding='valid'),
                flatten(),
                dropout(0.4),
                dense(1000),
                softmax()
            ]
        else:
            self.output_layers = outputs_layers
예제 #3
0
파일: VGG.py 프로젝트: iiharu/NN
    def build(self, input_shape=(224, 224, 3), classes=1000):
        inputs = keras.Input(shape=input_shape)

        outputs = inputs
        for i, b in enumerate(self.blocks):
            outputs = self.conv_block(outputs, self.filters[i], b)
            outputs = max_pooling2d(pool_size=(2, 2))(outputs)

        outputs = dense(4096)(outputs)
        outputs = dense(4096)(outputs)

        outputs = dense(1000)(outputs)
        outputs = softmax()(outputs)

        model = keras.Model(inputs, outputs)

        model.summary()

        return model
예제 #4
0
파일: GoogLeNet.py 프로젝트: iiharu/NN
    def inception(self, inputs, filters, layers=None):
        """
        Inception Module (default is inception v1)

        If you want to use another inception module,
        set `layers' appropriate layer function.
        Below is inception v2 (Module A) example:
        inception_layers = [[conv2d(filters=filters, kernel_size=(1, 1))],
                            [conv2d(filters=filters, kernel_size=(1, 1)),
                             conv2d(filters=filters, kernel_size=(3, 3))],
                            [conv2d(filters=filters, kernel_size=(1, 1)),
                             conv2d(filters=filters, kernel_size=(3, 3))
                             conv2d(filters=filters, kernel_size=(3, 3))],
                            [max_pooling2d(pool_size=(3, 3), strides=1),
                             conv2d(filters=filters, kernel_size=(1, 1))]]
        outputs = self.inception(inputs, filters, layers=inception_layers)
        """
        if layers is None:
            layers = [[conv2d(filters=filters, kernel_size=(1, 1))],
                      [
                          conv2d(filters=filters, kernel_size=(1, 1)),
                          conv2d(filters=filters, kernel_size=(3, 3))
                      ],
                      [
                          conv2d(filters=filters, kernel_size=(1, 1)),
                          conv2d(filters=filters, kernel_size=(5, 5))
                      ],
                      [
                          max_pooling2d(pool_size=(3, 3), strides=1),
                          conv2d(filters=filters, kernel_size=(1, 1))
                      ]]

        outputs = [inputs] * len(layers)

        for i in range(len(layers)):
            for layer in layers[i]:
                outputs[i] = layer(outputs[i])

        outputs = concat()(outputs)

        return outputs
예제 #5
0
파일: GoogLeNet.py 프로젝트: iiharu/NN
    def build(self, input_shape, classes):
        # input
        inputs = keras.Input(shape=input_shape)

        filters = 64
        outputs = conv2d(filters=filters,
                         kernel_size=(7, 7),
                         strides=2,
                         padding='same')(inputs)
        outputs = max_pooling2d(pool_size=(3, 3), strides=2,
                                padding='same')(outputs)
        filters = 192
        # using batch norm instead of local response norm
        outputs = batch_normalization()(outputs)
        outputs = conv2d(filters=filters,
                         kernel_size=(1, 1),
                         strides=1,
                         padding='valid')(outputs)
        outputs = conv2d(filters=filters,
                         kernel_size=(3, 3),
                         strides=1,
                         padding='same')(outputs)
        # using batch norm instead of local response norm
        outputs = batch_normalization()(outputs)
        outputs = max_pooling2d(pool_size=(3, 3), strides=2,
                                padding='same')(outputs)

        # inception (3a)
        filters = 256
        outputs = self.inception(inputs=outputs, filters=filters)
        # inception (3b)
        filters = 480
        outputs = self.inception(inputs=outputs, filters=filters)

        outputs = max_pooling2d(pool_size=(3, 3), strides=2,
                                padding='same')(outputs)

        # inception (4a)
        filters = 512
        outputs = self.inception(inputs=outputs, filters=filters)

        # if K.learning_phase() == 1:
        outputs2 = self.classifier_aux(outputs, classes=classes)

        # inception (4b)
        outputs = self.inception(inputs=outputs, filters=filters)
        # inception (4c)
        outputs = self.inception(inputs=outputs, filters=filters)
        # inception (4d)
        filters = 528
        outputs = self.inception(inputs=outputs, filters=filters)

        # if K.learning_phase() == 1:
        outputs1 = self.classifier_aux(outputs, classes=classes)

        # inception (4e)
        filters = 832
        outputs = self.inception(inputs=outputs, filters=filters)

        outputs = max_pooling2d(pool_size=(2, 2), strides=2,
                                padding='same')(outputs)

        # inception (5a)
        outputs = self.inception(inputs=outputs, filters=filters)
        # inception (5b)
        filters = 1024
        outputs = self.inception(inputs=outputs, filters=filters)

        # classifier
        outputs0 = self.classifier_main(inputs=outputs, classes=1000)

        model = keras.Model(inputs=inputs,
                            outputs=[outputs0, outputs1, outputs2])

        model.summary()

        return model
예제 #6
0
파일: Xception.py 프로젝트: iiharu/NN
    def build(self, input_shape, classes):

        inputs = keras.Input(shape=input_shape)

        # Entry flow
        filters = 32
        outputs = conv_relu_block(inputs, filters=filters, strides=(2, 2))

        filters = 64
        outputs = conv_relu_block(inputs, filters=filters)

        residual = outputs

        filters = 128
        outputs = separable_conv_block(outputs, filters=filters)
        outputs = relu_separable_conv_block(outputs, filters=filters)
        outputs = max_pooling2d(pool_size=(3, 3), strides=(2, 2))(outputs)
        residual = conv_block(residual,
                              filters=filters,
                              kernel_size=(1, 1),
                              strides=(2, 2))
        outputs = add()([outputs, residual])

        filters = 256
        outputs = relu_separable_conv_block(outputs, filters=filters)
        outputs = relu_separable_conv_block(outputs, filters=filters)
        outputs = max_pooling2d(pool_size=(3, 3), strides=(2, 2))(outputs)
        residual = conv_block(residual,
                              filters=filters,
                              kernel_size=(1, 1),
                              strides=(2, 2))
        outputs = add()([outputs, residual])

        filters = 728
        outputs = relu_separable_conv_block(outputs, filters=filters)
        outputs = relu_separable_conv_block(outputs, filters=filters)
        outputs = max_pooling2d(pool_size=(3, 3), strides=(2, 2))(outputs)
        residual = conv_block(residual,
                              filters=filters,
                              kernel_size=(1, 1),
                              strides=(2, 2))
        outputs = add()([outputs, residual])

        # Middle flow
        filters = 728
        for _ in range(8):
            residual = outputs

            outputs = relu_separable_conv_block(outputs, filters=filters)
            outputs = relu_separable_conv_block(outputs, filters=filters)
            outputs = relu_separable_conv_block(outputs, filters=filters)
            outputs = add()([outputs, residual])

        # Exit flow
        residual = outputs
        outputs = relu_separable_conv_block(outputs, filters=filters)

        filters = 1024
        outputs = relu_separable_conv_block(outputs, filters=filters)
        outputs = add()([outputs, residual])

        filters = 1536
        outputs = separable_conv_relu_block(outputs, filters=filters)

        filters = 2048
        outputs = separable_conv_relu_block(outputs, filters=filters)

        outputs = global_average_pooling2d()(outputs)

        outputs = dense(filters)(outputs)
        outputs = relu()(outputs)

        outputs = dense(1000)(outputs)
        outputs = softmax()(outputs)

        model = keras.Model(inputs, outputs)

        model.summary()

        return model