def CreateResNetModel(self, input_shape, classes):
        X_input = Input(name='the_input', shape=input_shape)
        x = Conv2D(kernel_size=3,
                   filters=16,
                   strides=1,
                   padding='same',
                   kernel_regularizer=regularizers.l2(0.01))(X_input)
        x = BatchNormalization()(x)
        x = Activation(relu)(x)

        x = block(16)(x)
        x = block(16)(x)

        x = BatchNormalization()(x)
        x = Activation(relu)(x)

        # 28x28x48 -> 1x48
        x = GlobalAveragePooling2D()(x)
        # dropout for more robust learning
        x = Dropout(0.2)(x)
        last = Dense(units=classes,
                     activation='softmax',
                     kernel_regularizer=regularizers.l2(0.01))(x)

        model = Model(inputs=X_input, outputs=last)
        optimizer = optimizers.Adadelta()
        model.compile(optimizer=optimizer,
                      loss=[focal_loss(alpha=0.25, gamma=2)])
        print('Original resnet neural network established. ')
        return model
    def CreateCustomizedResNetModel(self, input_shape, classes):
        X_input = Input(name='the_input', shape=input_shape)
        level_h1 = block(32)(X_input)
        level_m1 = MaxPooling2D(pool_size=2, strides=None,
                                padding="valid")(level_h1)  # 池化层
        level_h2 = block(64)(level_m1)
        level_m2 = MaxPooling2D(pool_size=2, strides=None,
                                padding="valid")(level_h2)  # 池化层
        level_h3 = block(128)(level_m2)
        level_m3 = MaxPooling2D(pool_size=2, strides=None,
                                padding="valid")(level_h3)  # 池化层
        # level_h4 = block(64)(level_m3)
        # level_m4 = MaxPooling2D(pool_size=2, strides=None, padding="valid")(level_h4)  # 池化层
        flayer = Flatten()(level_m3)

        fc = Dense(classes, use_bias=True,
                   kernel_initializer='he_normal')(flayer)  # 全连接层
        y_pred = Activation('softmax', name='Activation0')(fc)

        model = Model(inputs=X_input, outputs=y_pred)
        optimizer = optimizers.Adadelta()
        # model.compile(optimizer=optimizer, loss='binary_crossentropy')# [focal_loss])
        model.compile(optimizer=optimizer,
                      loss=[focal_loss(alpha=0.25, gamma=2)])
        print('Customized resnet model estabished.')
        self.modelname = 'residual'
        return model
Exemple #3
0
    def __CreateCustomizedResNetModel__(self):
        level_h1 = block(32)(self.model_input)
        level_m1 = MaxPooling2D(pool_size=2, strides=None,
                                padding="valid")(level_h1)  # 池化层
        level_h2 = block(64)(level_m1)
        level_m2 = MaxPooling2D(pool_size=2, strides=None,
                                padding="valid")(level_h2)  # 池化层
        level_h3 = block(128)(level_m2)
        level_m3 = MaxPooling2D(pool_size=2, strides=None,
                                padding="valid")(level_h3)  # 池化层

        flayer = GlobalAveragePooling2D()(level_m3)
        fc = Dense(self.classes, use_bias=True,
                   kernel_initializer='he_normal')(flayer)  # 全连接层
        y_pred = Activation('softmax')(fc)
        model = Model(inputs=self.model_input, outputs=y_pred)
        submodel = Model(inputs=self.model_input, outputs=flayer)
        print('Customized resnet model estabished.')
        modelname = 'residual'
        return model, modelname, submodel