【发布时间】:2023-03-15 01:35:01
【问题描述】:
我正在学习 Keras 和功能 API 的使用,特别是关于使用预训练的 VGG16 模型进行另一个分类任务,我遇到了这段代码:
baseModel = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
headModel=baseModel.output
headModel=Flatten(name="flatten")(headModel)
headModel=Dense(D, activation="relu")(headModel)
headModel=Dropout(0.5)(headModel)
headModel = Dense(classes, activation="softmax")(headModel)
model = Model(inputs=baseModel.input, outputs=headModel)
最后一行,特别是baseModel.input 部分让我感到困惑。在official tutorial 中,inputs 参数接收一个张量,该张量指定输入层应该如何,outputs 模型的其余部分:
from keras.models import Model
from keras.layers import Input, Dense
a = Input(shape=(32,))
b = Dense(32)(a)
model = Model(inputs=a, outputs=b)
这个模型将包括在给定 a 的情况下计算 b 所需的所有层。
但是在前面的示例中,baseModel.input 用于指定整个 VGG16 模型,减去用于创建 headModel 的层(新部分)。从文档来看,input 属性继承自Layer object:
输入
检索层的输入张量。
如果我只在构造函数中将模型的输入张量指定为inputs,Model 类如何能够构建完整的 VGG16 模型 +headModel?
【问题讨论】:
标签: keras deep-learning