def build_model(self, loss, P=None): if self.type[:-1] == 'resnet': model = cifar10_resnet(int(self.type[-1]), self, self.decay, loss) self.compile(model, loss, P)
def build_model(self, loss, P=None): model = cifar10_resnet(self, self.decay, loss) self.compile(model, loss, P)
def get_model(dataset='mnist', input_tensor=None, input_shape=None, num_classes=10): """ Takes in a parameter indicating which model type to use ('mnist', 'cifar-10' or 'cifar-100') and returns the appropriate Keras model. :param dataset: A string indicating which dataset we are building a model for. input_tensor: optional Keras tensor (i.e. output of `layers.Input()`) to use as image input for the model. input_shape: optional shape tuple :return: The model; a Keras 'Model' instance. """ assert dataset in ['mnist', 'cifar-10', 'cifar-100'], \ "dataset parameter must be either 'mnist', 'cifar-10' or 'cifar-100'" if input_tensor is None: img_input = Input(shape=input_shape) else: if not K.is_keras_tensor(input_shape): img_input = Input(tensor=input_tensor, shape=input_shape) else: img_input = input_tensor if dataset == 'mnist': # ## x = Conv2D(32, (3, 3), padding='same', kernel_initializer="he_normal", name='conv1')(img_input) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D((2, 2), strides=(2, 2), name='pool1')(x) x = Conv2D(64, (3, 3), padding='same', kernel_initializer="he_normal", name='conv2')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D((2, 2), strides=(2, 2), name='pool2')(x) x = Flatten()(x) x = Dense(128, kernel_initializer="he_normal", name='fc1')(x) x = BatchNormalization()(x) x = Activation('relu', name='lid')(x) # x = Dropout(0.2)(x) x = Dense(num_classes, kernel_initializer="he_normal")(x) x = Activation(tf.nn.softmax)(x) model = Model(img_input, x) elif dataset == 'cifar-10': # Block 1 x = Conv2D(64, (3, 3), padding='same', kernel_initializer="he_normal", name='block1_conv1')(img_input) x = BatchNormalization()(x) x = Activation('relu')(x) x = Conv2D(64, (3, 3), padding='same', kernel_initializer="he_normal", name='block1_conv2')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x) # Block 2 x = Conv2D(128, (3, 3), padding='same', kernel_initializer="he_normal", name='block2_conv1')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = Conv2D(128, (3, 3), padding='same', kernel_initializer="he_normal", name='block2_conv2')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x) # Block 3 x = Conv2D(196, (3, 3), padding='same', kernel_initializer="he_normal", name='block3_conv1')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = Conv2D(196, (3, 3), padding='same', kernel_initializer="he_normal", name='block3_conv2')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x) x = Flatten(name='flatten')(x) x = Dense(256, kernel_initializer="he_normal", kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01), name='fc1')(x) x = BatchNormalization()(x) x = Activation('relu', name='lid')(x) x = Dense(num_classes, kernel_initializer="he_normal")(x) x = Activation(tf.nn.softmax)(x) # Create model. model = Model(img_input, x) elif dataset == 'cifar-100': model = cifar10_resnet(depth=7, num_classes=num_classes) return model