我想对我的 keras 模型(称为 model1
)进行深度复制,以便能够在 for 循环中使用它,然后为每个 for 循环迭代重新初始化并执行 fit
为模型增加了一个样本。我希望能够在每次迭代后初始化模型,因为在执行 fit
之后(但是我的模型被修改了,我希望它保持原样,当我使用 load_weights 从路径加载时) .
我的代码看起来像:
model1= create_Model()
model1.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model1.load_weights('my_weights')
model_copy= create_Model()
model_copy.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model_copy= keras.models.clone_model(model1)
for j in range(0, image_size):
model_copy.fit(sample[j], sample_lbl[j])
prediction= model_copy.predict(sample[j])
此外,每次在 for 循环中加载模型对我来说并不是很有效,因为这很耗时。在我的案例中,我该如何正确地进行深层复制?我发布的代码给出了以下与函数 .fit 和我的参考模型 model_copy 有关的错误:
RuntimeError:您必须在训练/测试之前编译模型。使用
model.compile(optimizer, loss)
。原文由 Jose Ramon 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是 model_copy 可能在克隆后没有编译。其实有几个问题:
显然克隆不会复制损失函数、优化器信息等。
在编译之前,您还需要构建模型。
此外,克隆不会复制权重
所以你在克隆后需要几行额外的代码。例如,对于 10 个输入变量:
更简单的方法 1:从文件加载权重
如果我正确理解你的问题,那么有一种更简单的方法可以做到这一点。您不需要克隆模型,只需要保存 old_weights 并在循环开始时设置权重。您可以直接从文件中加载权重。
更简单的方法 2:从之前的 get_weights() 加载权重
或者,如果您不想从文件加载: