概述
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()