zoukankan      html  css  js  c++  java
  • keras中的模型保存和加载

    tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本。keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式。

    keras的模型保存分为多种情况。

    一、不保存模型只显示大概结构

    • model.summary()
      这个函数会打印模型结构,但是仅仅是打印到控制台。

    • keras.utils.plot_model()
      使用graphviz中的dot.exe生成网络结构拓扑图

    二、保存模型结构

    • keras.models.Model对象的to_json,to_yaml
      只保存模型结构,加载时使用keras.models.model_from_json(),keras.models.model_from_yaml()

    • keras.model.get_config()返回文本形式的配置
      使用keras.model.model_from_config可以加载模型。

    三、保存全部结构

    keras.core.saving.py这个文件十分重要,keras的模型保存、加载都需要这个文件。
    但是不建议直接使用这个文件,因为keras中的Model对象和models模块会调用这个文件。
    keras.core包下的内容一般供内部使用,不暴露给使用者。

    Model对象提供了save()和save_wights()两个方法。save()方法保存了三种东西:

    • 模型结构
    • 模型参数
    • 优化器参数

    其中优化器参数是给优化器用的,用于继续训练模型。有些优化器比如AdamOptimizer需要根据训练步数来调整不同参数的学习速率,这样在分阶段训练模型时才能够保证正确。save()函数保存结果就是一个hdf5文件,不像tensorflow一下子保存好多种文件。tensorflow把模型结构和权重分开保存,目的是多个权重文件可以共用一个模型结构文件,但是模型结构文件通常非常小,所占空间远远小于参数所占空间。

    Model对象的save_weights()方法只保存了模型参数而没有保存模型结构,它的保存格式也是hdf5。它保存的数据不能用于继续训练模型。

    Model实例的save()方法有一个等价方式:使用models.save_model()。

    对于使用save()方法保存的文件,可以使用models.load_model()进行加载,此函数直接返回一个Model对象。因为save()方法保存了模型的全部内容,所以可以直接“无中生有”创造一个模型。

    对于使用save_weights()方法保存的文件,只能通过Model对象提供的load_weights()方法加载模型权重。 并且,在加载模型权重之前,必须把网络结构定义好,并且模型的各个层的名称必须与保存模型权重时的各个层保持一致。

  • 相关阅读:
    Java正则表达式的使用
    萤火虫小巷2(看完了)
    第七章--Java基础类库--与用户的互动
    Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色
    电影:换肤(Replace)
    Android界面编程--使用活动条(ActionBar)
    萤火虫小巷1
    大三下半学期(3月4日定下的学习计划)
    12月17日问题
    JQuery 分页显示jquery-pager-1.0.js
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/9788179.html
Copyright © 2011-2022 走看看