【问题标题】:Load customized regularizer in Keras在 Keras 中加载自定义的正则化器
【发布时间】:2019-07-22 06:31:10
【问题描述】:

我想使用load_model('path/to/model.h5') 加载经过训练的模型。

model.h5 的架构是这样的

model = Sequential()
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
# The last layer is regularized with a custom regularizer
model.add(Dense(10, activation='softmax', W_regularizer=my_reg))

model.save('path/to/model.h5')

,其中包含一个自定义的正则化器my_reg。然后,当我想使用load_model('path/to/model.h5') 加载model.h5 时,它会显示错误消息:

  File "myfile.py", line 30, 
    model = load_model(model_path)
  File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 140, in load_model
    model = model_from_config(model_config, custom_objects=custom_objects)
  File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 189, in model_from_config
    return layer_from_config(config, custom_objects=custom_objects)
  File "/usr/local/lib/python2.7/dist-packages/keras/utils/layer_utils.py", line 34, in layer_from_config
    return layer_class.from_config(config['config'])
  File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 1060, in from_config
    layer = get_or_create_layer(conf)
  File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 1039, in get_or_create_layer
    layer = layer_from_config(layer_data)
  File "/usr/local/lib/python2.7/dist-packages/keras/utils/layer_utils.py", line 34, in layer_from_config
    return layer_class.from_config(config['config'])
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 899, in from_config
    return cls(**config)
  File "/usr/local/lib/python2.7/dist-packages/keras/layers/core.py", line 705, in __init__
    self.W_regularizer = regularizers.get(W_regularizer)
  File "/usr/local/lib/python2.7/dist-packages/keras/regularizers.py", line 162, in get
    instantiate=True, kwargs=kwargs)
  File "/usr/local/lib/python2.7/dist-packages/keras/utils/generic_utils.py", line 30, in get_from_module
    str(identifier))
Exception: Invalid regularizer: {}

似乎load_model 不支持带有自定义正则化器的模型。如何加载此模型?如果有人可以帮助我,真的很感激!

【问题讨论】:

标签: python python-2.7 tensorflow keras regularized


【解决方案1】:

据我所知,keras 在从保存的模型中加载自定义组件(不仅是正则化器,还有优化器等)时遇到了一些问题。不过,我不是 keras 自定义模型领域的专家,我只是提供我在类似情况下的经验。

最明显的解决方案是使用 model.save_weights() 保存模型的权重,这将只保存您的权重(而不是架构),然后当您想再次加载模型时,从头开始创建模型(以及定义您的自定义正则化器)并使用 model.load_weights() 加载权重。

这似乎不是更方便的解决方案,但它可能会按预期工作。

【讨论】:

    【解决方案2】:

    keras 能够定义自定义对象(层、优化器、损失函数、度量函数等),并具有在使用 load_model 方法加载模型时通过将自定义对象字典传递给 custom_objects 来加载自定义对象的功能。例如

    
    from keras import backend as K
    
    def custom_regularizer(weight_matrix):
        # the rest of the code
        pass
    
    model = load_model("path/to/model.h5", custom_objects={"custom_regularizer":custom_regularizer})
    

    【讨论】:

    猜你喜欢
    • 2018-12-24
    • 2019-01-25
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2020-03-05
    • 2020-04-30
    相关资源
    最近更新 更多