Applications

Keras应用程序是深度学习模型,可与预训练的权重一起使用. 这些模型可用于预测,特征提取和微调.

实例化模型时会自动下载权重. 它们存储在~/.keras/models/ .

Available models

Models for image classification with weights trained on ImageNet:

所有这些架构都与所有后端(TensorFlow,Theano和CNTK)兼容,并且在实例化时,将根据在~/.keras/keras.json配置文件中设置的图像数据格式来构建模型. 例如,如果您设置了image_data_format=channels_last ,那么将从该存储库加载的任何模型都将根据TensorFlow数据格式约定" Height-Width-Depth"进行构建.

请注意:-对于Keras Keras < 2.2.0 ,Xception模型仅适用于TensorFlow,因为它依赖于SeparableConvolution层. -对于Keras Keras < 2.1.5 ,由于依赖于DepthwiseConvolution层,因此MobileNet模型仅可用于TensorFlow.


Usage examples for image classification models

Classify ImageNet classes with ResNet50

from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

model = ResNet50(weights='imagenet')

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

preds = model.predict(x)
# decode the results into a list of tuples (class, description, probability)
# (one such list for each sample in the batch)
print('Predicted:', decode_predictions(preds, top=3)[0])
# Predicted: [(u'n02504013', u'Indian_elephant', 0.82658225), (u'n01871265', u'tusker', 0.1122357), (u'n02504458', u'African_elephant', 0.061040461)]

Extract features with VGG16

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

model = VGG16(weights='imagenet', include_top=False)

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

features = model.predict(x)

Extract features from an arbitrary intermediate layer with VGG19

from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np

base_model = VGG19(weights='imagenet')
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block4_pool').output)

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

block4_pool_features = model.predict(x)

Fine-tune InceptionV3 on a new set of classes

from keras.applications.inception_v3 import InceptionV3
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K

# create the base pre-trained model
base_model = InceptionV3(weights='imagenet', include_top=False)

# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 200 classes
predictions = Dense(200, activation='softmax')(x)

# this is the model we will train
model = Model(inputs=base_model.input, outputs=predictions)

# first: train only the top layers (which were randomly initialized)
# i.e. freeze all convolutional InceptionV3 layers
for layer in base_model.layers:
    layer.trainable = False

# compile the model (should be done *after* setting layers to non-trainable)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

# train the model on the new data for a few epochs
model.fit_generator(...)

# at this point, the top layers are well trained and we can start fine-tuning
# convolutional layers from inception V3. We will freeze the bottom N layers
# and train the remaining top layers.

# let's visualize layer names and layer indices to see how many layers
# we should freeze:
for i, layer in enumerate(base_model.layers):
   print(i, layer.name)

# we chose to train the top 2 inception blocks, i.e. we will freeze
# the first 249 layers and unfreeze the rest:
for layer in model.layers[:249]:
   layer.trainable = False
for layer in model.layers[249:]:
   layer.trainable = True

# we need to recompile the model for these modifications to take effect
# we use SGD with a low learning rate
from keras.optimizers import SGD
model.compile(optimizer=SGD(lr=0.0001, momentum=0.9), loss='categorical_crossentropy')

# we train our model again (this time fine-tuning the top 2 inception blocks
# alongside the top Dense layers
model.fit_generator(...)

Build InceptionV3 over a custom input tensor

from keras.applications.inception_v3 import InceptionV3
from keras.layers import Input

# this could also be the output a different Keras model or layer
input_tensor = Input(shape=(224, 224, 3))  # this assumes K.image_data_format() == 'channels_last'

model = InceptionV3(input_tensor=input_tensor, weights='imagenet', include_top=True)

Documentation for individual models

Model Size 前1个精度 前五名的准确性 Parameters Depth
Xception 88兆字节 0.790 0.945 22,910,480 126
VGG16 528兆字节 0.713 0.901 138,357,544 23
VGG19 549兆字节 0.713 0.900 143,667,240 26
ResNet50 98兆字节 0.749 0.921 25,636,712 -
ResNet101 171兆字节 0.764 0.928 44,707,176 -
ResNet152 232兆字节 0.766 0.931 60,419,944 -
ResNet50V2 98兆字节 0.760 0.930 25,613,800 -
ResNet101V2 171兆字节 0.772 0.938 44,675,560 -
ResNet152V2 232兆字节 0.780 0.942 60,380,648 -
InceptionV3 92兆字节 0.779 0.937 23,851,784 159
InceptionResNetV2 215兆字节 0.803 0.953 55,873,736 572
MobileNet 16兆字节 0.704 0.895 4,253,864 88
MobileNetV2 14兆字节 0.713 0.901 3,538,984 88
DenseNet121 33兆字节 0.750 0.923 8,062,504 121
DenseNet169 57兆字节 0.762 0.932 14,307,880 169
DenseNet201 80兆字节 0.773 0.936 20,242,984 201
NASNetMobile 23兆字节 0.744 0.919 5,326,716 -
NASNetLarge 343兆字节 0.825 0.960 88,949,818 -

top-1和top-5精度是指模型在ImageNet验证数据集上的性能.

深度是指网络的拓扑深度. 这包括激活层,批处理规范化层等.


Xception

keras.applications.xception.Xception(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

Xception V1模型,权重在ImageNet上进行了预训练.

在ImageNet上,此模型的前1个验证精度为0.790,前5个验证精度为0.945.

此模型可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建.

该型号的默认输入尺寸为299x299.

Arguments

  • include_top:是否在网络顶部包括全连接层.
  • 权重: None (随机初始化)或'imagenet' (在ImageNet上进行预训练)之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(299, 299, 3) .它应具有3个输入通道,并且宽度和高度应不小于71. (150, 150, 3)将是一个有效值.
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

Keras Model实例.

References

License

这些砝码由我们自己训练,并根据MIT许可发布.


VGG16

keras.applications.vgg16.VGG16(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

VGG16模型,权重在ImageNet上进行了预训练.

可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建该模型.

该模型的默认输入大小为224x224.

Arguments

  • include_top:是否在网络顶部包括3个完全连接的层.
  • 权重: None (随机初始化)或'imagenet' (在ImageNet上进行预训练)之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(224, 224, 3) 224,224,3 (224, 224, 3) (使用'channels_last'数据格式)或(3, 224, 224) (使用'channels_first'数据格式),它应该有3个输入通道,宽度和高度不小于32 (200, 200, 3)例如, (200, 200, 3)是一个有效值).
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

A Keras Model instance.

References

License

这些权重来自VGG在牛津大学VGG根据知识共享署名许可发布的权重.


VGG19

keras.applications.vgg19.VGG19(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

VGG19模型,权重在ImageNet上进行了预训练.

可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建该模型.

该模型的默认输入大小为224x224.

Arguments

  • include_top:是否在网络顶部包括3个完全连接的层.
  • 权重: None (随机初始化)或'imagenet' (在ImageNet上进行预训练)之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(224, 224, 3) 224,224,3 (224, 224, 3) (使用'channels_last'数据格式)或(3, 224, 224) (使用'channels_first'数据格式),它应该有3个输入通道,宽度和高度不小于32 (200, 200, 3)例如, (200, 200, 3)是一个有效值).
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

Keras Model实例.

References

License

这些权重来自VGG在牛津大学VGG根据知识共享署名许可发布的权重.


ResNet

keras.applications.resnet.ResNet50(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet.ResNet101(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet.ResNet152(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet_v2.ResNet50V2(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet_v2.ResNet101V2(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.resnet_v2.ResNet152V2(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

ResNet,ResNetV2模型,权重在ImageNet上进行了预训练.

此模型可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建.

该模型的默认输入大小为224x224.

Arguments

  • include_top:是否在网络顶部包括全连接层.
  • 权重: None (随机初始化)或'imagenet' (在ImageNet上进行预训练)之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(224, 224, 3) 224,224,3 (224, 224, 3) (使用'channels_last'数据格式)或(3, 224, 224) (使用'channels_first'数据格式),它应该有3个输入通道,宽度和高度不小于32 (200, 200, 3)例如, (200, 200, 3)是一个有效值).
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

Keras Model实例.

References

License

这些权重是从以下端口移植的:


InceptionV3

keras.applications.inception_v3.InceptionV3(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

Inception V3模型,权重在ImageNet上进行了预训练.

此模型可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建.

该型号的默认输入尺寸为299x299.

Arguments

  • include_top:是否在网络顶部包括全连接层.
  • 权重: None (随机初始化)或'imagenet' (在ImageNet上进行预训练)之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(299, 299, 3) 299,299,3 (299, 299, 3) (使用'channels_last'数据格式)或(3, 299, 299) (使用'channels_first'数据格式),它应该有3个输入通道,宽度和高度不小于75 (150, 150, 3)例如, (150, 150, 3)是一个有效值).
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

Keras Model实例.

References

License

这些权重根据Apache许可发布 .


InceptionResNetV2

keras.applications.inception_resnet_v2.InceptionResNetV2(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

Inception-ResNet V2模型,权重在ImageNet上进行了预训练.

此模型可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建.

该型号的默认输入尺寸为299x299.

Arguments

  • include_top:是否在网络顶部包括全连接层.
  • 权重: None (随机初始化)或'imagenet' (在ImageNet上进行预训练)之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(299, 299, 3) 299,299,3 (299, 299, 3) (带有'channels_last'数据格式)或(3, 299, 299) (带有'channels_first'数据格式),它应该有3个输入通道,宽度和高度不小于75 (150, 150, 3)例如, (150, 150, 3)是一个有效值).
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

Keras Model实例.

References

License

这些权重根据Apache许可发布 .


MobileNet

keras.applications.mobilenet.MobileNet(input_shape=None, alpha=1.0, depth_multiplier=1, dropout=1e-3, include_top=True, weights='imagenet', input_tensor=None, pooling=None, classes=1000)

MobileNet模型,权重在ImageNet上进行了预训练.

此模型可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建.

该模型的默认输入大小为224x224.

Arguments

  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(224, 224, 3) 224,224,3 (224, 224, 3) (使用'channels_last'数据格式)或(3, 224, 224) (使用'channels_first'数据格式),它应该有3个输入通道,宽度和高度不小于32 (200, 200, 3)例如, (200, 200, 3)是一个有效值).
  • alpha:控制网络的宽度.
    • 如果alpha <1.0,则按比例减少每层中的滤镜数量.
    • 如果alpha > 1.0,则按比例增加每层中的滤镜数量.
    • 如果alpha = 1,则在每一层使用纸张的默认过滤器数量.
  • depth_multiplier:用于深度卷积的深度乘数(也称为分辨率乘数)
  • 辍学率:辍学率
  • include_top:是否在网络顶部包括全连接层.
  • 权重: None (随机初始化)或'imagenet' (ImageNet权重)
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

Keras Model实例.

References

License

这些权重根据Apache许可发布 .


DenseNet

keras.applications.densenet.DenseNet121(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.densenet.DenseNet169(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)
keras.applications.densenet.DenseNet201(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000)

DenseNet模型,权重在ImageNet上进行了预训练.

此模型可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建.

该模型的默认输入大小为224x224.

Arguments

  • 块:四个密集层的构建块数.
  • include_top:是否在网络顶部包括全连接层.
  • 权重:" None (随机初始化)," imagenet"(在ImageNet上进行预训练)或要加载的权重文件的路径之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • input_shape:可选的形状元组,仅当include_top为False时才指定(否则,输入形状必须为(224, 224, 3) 224,224,3 (224, 224, 3) (使用'channels_last'数据格式)或(3, 224, 224) (使用'channels_first'数据格式),它应该有3个输入通道,宽度和高度不小于32 (200, 200, 3)例如, (200, 200, 3)是一个有效值).
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • avg表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将为2D张量.
    • max表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_top为True且未指定weights参数时才指定.

Returns

Keras模型实例.

References

License

这些权重根据BSD 3条款许可发布 .


NASNet

keras.applications.nasnet.NASNetLarge(input_shape=None, include_top=True, weights='imagenet', input_tensor=None, pooling=None, classes=1000)
keras.applications.nasnet.NASNetMobile(input_shape=None, include_top=True, weights='imagenet', input_tensor=None, pooling=None, classes=1000)

神经架构搜索网络(NASNet)模型,权重在ImageNet上进行了预训练.

NASNetLarge模型的默认输入大小为331x331,NASNetMobile模型的默认输入大小为224x224.

Arguments

  • input_shape:可选的形状元组,仅当include_topFalse时才指定(否则,输入形状必须为(224, 224, 3) 224,224,3 (224, 224, 3) (使用'channels_last'数据格式)或(3, 224, 224) (使用'channels_first' NASNetMobile的(331, 331, 3)数据格式)或NASNetLarge的(331, 331, 3) 331,331,3 (331, 331, 3) (具有'channels_last'数据格式)或(3, 331, 331) 3,331,331 (3, 331, 331) (具有'channels_first'数据格式).它应该具有3个输入通道,且宽度正确并且高度应不小于32.例如(200, 200, 3)是一个有效值.
  • include_top: whether to include the fully-connected layer at the top of the network.
  • 权重: None (随机初始化)或'imagenet' (ImageNet权重)
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_topTrue且未指定weights参数时才指定.

Returns

Keras Model实例.

References

License

这些权重根据Apache许可发布 .


MobileNetV2

keras.applications.mobilenet_v2.MobileNetV2(input_shape=None, alpha=1.0, include_top=True, weights='imagenet', input_tensor=None, pooling=None, classes=1000)

MobileNetV2模型,权重在ImageNet上进行了预训练.

此模型可以使用'channels_first'数据格式(通道,高度,宽度)或'channels_last'数据格式(高度,宽度,通道)构建.

该模型的默认输入大小为224x224.

Arguments

  • input_shape:可选的形状元组,如果您要使用输入img分辨率不为(224,224,3)的模型,则要指定. 它应该恰好具有3个输入通道(224、224、3). 如果要从input_tensor推断input_shape,也可以忽略此选项. 如果您选择同时包含input_tensor和input_shape,则如果它们匹配,则将使用input_shape;如果形状不匹配,则将引发错误. 例如(160, 160, 3)将是一个有效值.
  • alpha:控制网络的宽度. 这在MobileNetV2论文中称为宽度倍增器.
    • 如果alpha <1.0,则按比例减少每层中的滤镜数量.
    • 如果alpha > 1.0,则按比例增加每层中的滤镜数量.
    • 如果alpha = 1,则在每一层使用纸张的默认过滤器数量.
  • include_top:是否在网络顶部包括全连接层.
  • 权重:" None (随机初始化)," imagenet"(在ImageNet上进行预训练)或要加载的权重文件的路径之一.
  • input_tensor:可选的Keras张量(即, layers.Input()输出)用作模型的图像输入.
  • pooling:当include_topFalse时,用于特征提取的可选池模式.
    • None表示模型的输出将是最后一个卷积块的4D张量输出.
    • 'avg'表示全局平均池将应用于最后一个卷积块的输出,因此模型的输出将是2D张量.
    • 'max'表示将应用全局最大池.
  • classes:用于将图像分类的可选类数,仅当include_top为True且未指定weights参数时才指定.

Returns

Keras模型实例.

Raises

ValueError:如果weights参数无效,或者weights ='imagenet'时无效的输入形状alpha行

References

License

这些权重根据Apache许可发布 .