|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| import keras
|
| from keras import layers
|
| from keras.src.applications import imagenet_utils
|
|
|
|
|
| def get_resnet50v2(input_shape: tuple, num_classes: int = None, dropout: float = None,
|
| pretrained: bool = True, **kwargs) -> keras.Model:
|
| """
|
| Returns a ResNet50v2 model with a custom classifier.
|
|
|
| Args:
|
| input_shape (tuple): The shape of the input tensor.
|
| dropout (float, optional): The dropout rate for the custom classifier. Defaults to 1e-6.
|
| num_classes (int, optional): The number of output classes. Defaults to None.
|
| pretrained (tool, optional): The pre-trained weights to use. Either "imagenet"
|
| or None. Defaults to "imagenet".
|
|
|
| Returns:
|
| keras.Model: The ResNet50V2 model with a custom classifier.
|
| """
|
|
|
|
|
| if dropout:
|
|
|
| base_model = keras.applications.resnet_v2.ResNet50V2(input_shape=input_shape,
|
| weights="imagenet" if pretrained else None,
|
| pooling="avg",
|
| classes=num_classes,
|
| classifier_activation="softmax",
|
| include_top=False)
|
| x = layers.Dropout(rate=dropout, name="dropout")(base_model.output)
|
| if num_classes > 2:
|
| outputs = layers.Dense(num_classes, activation="softmax")(x)
|
| else:
|
| outputs = layers.Dense(1, activation="sigmoid")(x)
|
| else:
|
|
|
| base_model = keras.applications.resnet_v2.ResNet50V2(input_shape=input_shape,
|
| weights="imagenet" if pretrained else None,
|
| pooling="avg",
|
| classes=num_classes,
|
| classifier_activation="softmax",
|
| include_top=True)
|
| outputs = base_model.output
|
|
|
|
|
| model = keras.Model(inputs=base_model.input, outputs=outputs, name="resnet50v2")
|
|
|
| return model
|
|
|
|
|