当我开始训练模型时,之前没有保存任何模型。我可以安全地使用model.compile()
。现在,我已经将模型保存在h5
文件中,以便使用checkpoint
进行进一步的培训。
比方说,我想进一步训练模型。在这一点上我很困惑:我可以在这里使用model.compile()
吗?它应该放在model = load_model()
语句之前还是之后?如果model.compile()
重新初始化了所有的权重和偏差,我应该把它放在model = load_model()
语句之前。
在发现一些讨论之后,对我来说,似乎只有当我之前没有保存模型时才需要model.compile()
。一旦我保存了模型,就不需要使用model.compile()
。这是对的还是错的?当我想要使用训练好的模型进行预测时,我应该在预测之前使用model.compile()
吗?
发布于 2017-12-28 01:07:38
何时使用?
如果你使用的是compile
,那么它肯定是在load_model()
之后。毕竟,你需要一个模型来编译。(PS:load_model
使用随模型一起保存的优化器自动编译模型)
compile
做了什么?
Compile定义了损失函数、优化器和指标。就这样。
它与权重无关,您可以根据需要多次编译模型,而不会对预先训练的权重造成任何问题。
您需要一个编译的模型来训练(因为训练使用损失函数和优化器)。但是没有必要为了预测而编译一个模型。
是否需要多次使用编译?
仅在以下情况下:
trainable
属性
重新编译的后果:
如果您再次编译模型,您将丢失状态的优化器。
这意味着你的训练在一开始会受到一些影响,直到它调整了学习率、动量等。但绝对不会对权重造成损害(当然,除非你的初始学习率太高,以至于第一步训练就疯狂地改变了微调的权重)。
发布于 2018-12-22 03:50:19
不要忘记,在更改层的trainable
标志后,您还需要编译模型,例如,当您想要对模型进行微调时:
在没有顶层的情况下加载VGG模型所有图层(例如,将一些图层放到顶层)通过再次设置data
trainable = True
上编译和训练模型VGG的一些图层
https://stackoverflow.com/questions/47995324
复制相似问题