tf.keras.applications.Xception

概述

keras的 Xception 模型,权值由 ImageNet 训练而来

该模型可同时构建于 channels_first (通道,高度,宽度) 和 channels_last (高度,宽度,通道)两种输入维度顺序。

模型默认输入尺寸是 299x299,详见下面的 权重注意

官方api:
https://www.tensorflow.org/api_docs/python/tf/keras/applications/Xception?version=stable

keras中文api:
https://keras.io/zh/applications/#xception

语法

tf.keras.applications.Xception(
    include_top=True, 
    weights='imagenet', 
    input_tensor=None, 
    input_shape=None, 
    pooling=None, 
    classes=1000
)
参数
  • include_top=True:是否包括全连接层,即:Dense层

  • weights=’imagenet’:权重初始化方式

    • None: 随机初始化
    • 'imagenet' :加载在 ImageNet 上预训练的权值,自动下载。保存位置见 默认保存位置
    • 路径:如果权重文件在其他位置,这里指定路径。相对路径即可
  • input_tensor=None:可选,Keras tensor 作为模型的输入(即 layers.Input() 输出的 tensor)

  • input_shape=None:可选,输入尺寸元组,仅当 include_top=False 时有效,否则输入形状必须是 (299, 299, 3)(对于 channels_last 数据格式),或者 (3, 299, 299)(对于 channels_first 数据格式)。它必须拥有 3 个输入通道,且宽高必须不小于 71。例如 (150, 150, 3) 是一个合法的输入尺寸。

  • pooling=None:可选,当 include_top 为 False 时,该参数指定了特征提取时的池化方式。

    • None 代表不池化,直接输出最后一层卷积层的输出,该输出是一个四维张量。
    • ‘avg’ 代表全局平均池化(GlobalAveragePooling2D),相当于在最后一层卷积层后面再加一层全局平均池化层,输出是一个二维张量。
    • ‘max’ 代表全局最大池化
  • classes=1000:可选,图片分类的类别数,仅当 include_top 为 True 并且不加载预训练权值时可用。

返回值
  • Model 对象。

模型的属性

trainable

卷积层的参数是否可以训练

例子:
# 卷积层的参数不可以训练
covn_base.trainable=False

层 属性

trainable

该层的参数是否可以训练

例子:
covn_base=tf.keras.applications.Xception(include_top=True,weights=xception_weight_path)

for layer in covn_base.layers[:-5]:
    layer.trainable=False

后面5层的参数随着训练会改变,前面n层的参数都不改变

权重

下载地址

https://github.com/fchollet/deep-learning-models/releases

默认保存位置

  • windows:C:\Users\当前登录用户名\.keras\models
  • linux:~/.keras/models/

注意

不同版本的权重,在使用时会不同:

  • xception_weights_tf_dim_ordering_tf_kernels.h5:包含全连接层权重,当指定 include_top=True 时加载该文件
  • xception_weights_tf_dim_ordering_tf_kernels_notop.h5:不包含全连接层权重,当指定 include_top=False 时加载该文件

例子

# 权重路径
vgg16_weight_path=r'../input/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5'

# 加载vgg16模型
covn_base=tf.keras.applications.Xception(include_top=True,weights=xception_weight_path)
covn_base.summary()

# 卷积层参数不可训练
covn_base.trainable=False

# 将vgg16模型的 卷积层 添加到新模型中(不包含全连接层)
model=tf.keras.Sequential()
for item in covn_base.layers[:-4]:
    model.add(item)
model.add(tf.keras.layers.GlobalAveragePooling2D())
model.add(tf.keras.layers.Dense(512,activation="relu"))
model.add(tf.keras.layers.Dense(1,activation="sigmoid"))
model.summary()

原文出处:/show_1EF4eVsJFRW4.html