Mad*_*war 0 python-3.x conv-neural-network keras transfer-learning
我正在尝试在我的 CNN 模型上应用转移学习,但出现以下错误。
model = model1(weights = "model1_weights", include_top=False)
Run Code Online (Sandbox Code Playgroud)
----
TypeError: __call__() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
谢谢
Mit*_*iku 14
如果您尝试使用自定义模型进行迁移学习,答案取决于您保存模型架构(描述)和权重的方式。
您可以使用 keras 的 load_model 方法轻松加载模型。
from keras.models import load_model
model = load_model("model_path.h5")
Run Code Online (Sandbox Code Playgroud)
您可以先从 json 文件加载模型描述,然后加载模型权重。
form keras.models import model_from_json
with open("path_to_json_file.json") as json_file:
model = model_from_json(json_file.read())
model.load_weights("path_to_weights_file.h5")
Run Code Online (Sandbox Code Playgroud)
加载旧模型后,您现在可以决定丢弃哪些层(通常这些层是顶部完全连接的层)以及冻结哪些层。假设你想使用模型的前五层而不再次训练,接下来的三层再次训练,最后一层被丢弃(这里假设网络层数大于八),以及在最后一层之后添加三个全连接层。这可以按如下方式完成。
for i in range(5):
model.layers[i].trainable = False
Run Code Online (Sandbox Code Playgroud)
for i in range(5,8):
model.layers[i].trainable = True
Run Code Online (Sandbox Code Playgroud)
ll = model.layers[8].output
ll = Dense(32)(ll)
ll = Dense(64)(ll)
ll = Dense(num_classes,activation="softmax")(ll)
new_model = Model(inputs=model.input,outputs=ll)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4660 次 |
| 最近记录: |