首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >model.compile()是否初始化Keras (tensorflow后端)中的所有权重和偏差?

model.compile()是否初始化Keras (tensorflow后端)中的所有权重和偏差?
EN

Stack Overflow用户
提问于 2017-12-28 00:15:21
回答 2查看 45.5K关注 0票数 92

当我开始训练模型时,之前没有保存任何模型。我可以安全地使用model.compile()。现在,我已经将模型保存在h5文件中,以便使用checkpoint进行进一步的培训。

比方说,我想进一步训练模型。在这一点上我很困惑:我可以在这里使用model.compile()吗?它应该放在model = load_model()语句之前还是之后?如果model.compile()重新初始化了所有的权重和偏差,我应该把它放在model = load_model()语句之前。

在发现一些讨论之后,对我来说,似乎只有当我之前没有保存模型时才需要model.compile()。一旦我保存了模型,就不需要使用model.compile()。这是对的还是错的?当我想要使用训练好的模型进行预测时,我应该在预测之前使用model.compile()吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-28 01:07:38

何时使用?

如果你使用的是compile,那么它肯定是在load_model()之后。毕竟,你需要一个模型来编译。(PS:load_model使用随模型一起保存的优化器自动编译模型)

compile 做了什么?

Compile定义了损失函数优化器指标。就这样。

它与权重无关,您可以根据需要多次编译模型,而不会对预先训练的权重造成任何问题。

您需要一个编译的模型来训练(因为训练使用损失函数和优化器)。但是没有必要为了预测而编译一个模型。

是否需要多次使用编译?

仅在以下情况下:

  • 您想要更改其中之一:
    • Loss function
    • 优化器/学习率
    • 指标
    • 某些图层优化器的trainable属性

  • 您加载(或创建)了尚未编译的模型。或者您的加载/保存方法没有考虑之前的compilation.

重新编译的后果:

如果您再次编译模型,您将丢失状态的优化器。

这意味着你的训练在一开始会受到一些影响,直到它调整了学习率、动量等。但绝对不会对权重造成损害(当然,除非你的初始学习率太高,以至于第一步训练就疯狂地改变了微调的权重)。

票数 187
EN

Stack Overflow用户

发布于 2018-12-22 03:50:19

不要忘记,在更改层的trainable标志后,您还需要编译模型,例如,当您想要对模型进行微调时:

在没有顶层的情况下加载VGG模型所有图层(例如,将一些图层放到顶层)通过再次设置data

  • un-freeze trainable = True

  • compile
  1. (不要忘记此步骤!)
  2. 在一些data

上编译和训练模型VGG的一些图层

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47995324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档