【问题标题】:How to access and update weight of each layer using fit_generator in Keras?如何在 Keras 中使用 fit_generator 访问和更新每一层的权重?
【发布时间】:2019-07-02 06:01:12
【问题描述】:

我想在优化过程中试验每一层的权重和偏差。我目前正在处理Cats Vs Dogs dataset .这里,编译后的模型数据通过model.fit_generator()传递。

我想在更新时获取每层的权重和梯度以应用阈值(如果梯度值小于阈值,则权重不会更新)。

我尝试实现自定义 fit_generator,但我还希望 fit_generator 的并行性以提高效率,在 CPU 上对图像进行实时数据增强,同时在 GPU 上训练模型。

【问题讨论】:

    标签: tensorflow image-processing optimization keras conv-neural-network


    【解决方案1】:

    您不需要自定义 fit_generator 方法。只是一个自定义优化器。 优化器定义权重更新操作。因此,您可以定义一个自定义优化器,在裁剪权重后实现与 sgd 或 Adam 类似的策略。

    关键是要定义一个继承自keras.optimizers.Optimizer 并实现get_updates 方法的类。此方法确定如何更新 grad 权重。在您的版本中,您可以剪辑渐变。

    我可以为您指出一些示例代码:我编写了一个自定义优化器,它允许使用 SciPy 优化器而不是 sgd (https://github.com/pedro-r-marques/keras-opt)。只是几行代码,拿来做例子应该是合理的。

    【讨论】:

    • 当我尝试运行这一行“model.compile(optimizer=GradientObserver(), loss='mse')”时,我收到此错误“无法使用抽象方法 get_config 实例化抽象类 GradientObserver” @pedromarques
    • @Leolime 你能告诉我你正在使用什么版本的 keras / TF。似乎较新版本的 API 需要定义该方法。
    • keras master 和 tensorflow master 似乎都在 Optimizer 基类中定义了get_config。我刚刚在 tensorflow 1.13 上重新运行了单元测试,似乎工作得很好。
    • 我正在使用 TF 1.14.0 @pedromarques
    • 非常感谢,@pedromarques,我已将 tensorflow 降级到 1.13.1,现在它可以工作了:D
    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 2017-12-01
    • 1970-01-01
    • 2018-12-23
    • 2017-06-07
    • 2021-05-12
    • 2023-03-04
    相关资源
    最近更新 更多