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
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
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
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
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
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