【问题标题】:Change keras floatx (default float type) in Python在 Python 中更改 keras floatx(默认浮点类型)
【发布时间】:2018-05-29 19:37:27
【问题描述】:

我正在寻找一种直接在 python 中将floatx 更改为keras 的方法。 floatx 是默认的float 类型(float16float32 ......)

配置存储在json 文件中:

$HOME/.keras/keras.json

但我正在寻找一种方法来更改我的 python 程序中的配置而不更改配置文件本身。

There is a similiar question,其中有人要求更改后端,该后端也存储在keras.json中。 接受的答案涉及设置环境变量KERAS_BACKEND 并重新加载keras 模块,但我没有找到floatx 的类似环境变量。

【问题讨论】:

    标签: python keras


    【解决方案1】:

    Turns out keras.backend has function for setting and retrieving the floatx value(在链接中向下滚动):

    keras.backend.floatx()
    >>> 'float32'
    keras.backend.set_floatx('float16')
    keras.backend.floatx()
    >>> 'float16'
    

    另外,在使用 set_floatx 后,您不能像更改后端一样重新加载 keras 模块,因为这样 keras 将简单地重新读取配置文件并返回到之前的值:

    keras.backend.floatx()
    >>> 'float32'
    keras.backend.set_floatx('float16')
    keras.backend.floatx()
    >>> 'float16'
    importlib.reload(keras.backend)
    keras.backend.floatx()
    >>> 'float32'
    

    【讨论】:

      【解决方案2】:

      嗯,floatx var 当然应该在keras.jsonas described in documentation 中使用。

      错误最少的方法是确实使用文件并重新加载模块。

      使用K.set_floatx,至少对我来说,模型的一部分保持不变(即使sef_floatx是我在新的python内核中加载keras模型后做的第一件事)

      尽管如此,我在将精度设置为 float16 时遇到了另一个错误:我所有的损失函数很快就变成了nan。不幸的是,我不得不回到 float32(默认)才有可能进行培训。

      【讨论】:

      • 我真的不喜欢重新加载模块。根据用例,这也可能变得非常错误。您的案例是否涉及使用 set_floatx 然后加载已创建的模型?那么图层已经有一个特定的浮点类型覆盖默认的浮点类型是有意义的。
      • 您打算多次更改它吗?我不明白您为什么不重新加载模型,除非您要在执行期间更改它。 (在执行期间更改此选项听起来是所有选项中最糟糕的)
      • 不,我的情况是“创建一个新模型”。
      • 我有一个通用的工作环境,我可以在每次开始培训/计划开始时对其进行更改。当然,我可以检查每次训练的值,但这似乎不是存储默认值的配置文件的正确方法。
      • 我不确定我是否理解你。如果你在配置文件中更改它就完成了。 (如果模块已经加载/导入,您只需要重新加载模块)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多