为什么在Keras-to-Tensorflow导出示例中keras.models.model_from_config()抛出ValueError?

时间:2017-07-27 13:42:04

标签: python tensorflow deep-learning keras

Keras网站this article关于将Keras模型导出到核心Tensorflow。然而这一步

element = driver.find_element_by_id("username")
element.send_keys("some text")

抛出错误:

new_model = model_from_config(config)

自从v2发布以来,人们已经提出使用Keras v1模型的Traceback (most recent call last): File "/home/hal9000/tf_serving_experiments/sndbx.py", line 38, in <module> new_model = model_from_config(config) File "/home/hal9000/keras2env/local/lib/python2.7/site-packages/keras/models.py", line 304, in model_from_config return layer_module.deserialize(config, custom_objects=custom_objects) File "/home/hal9000/keras2env/local/lib/python2.7/site-packages/keras/layers/__init__.py", line 54, in deserialize printable_module_name='layer') File "/home/hal9000/keras2env/local/lib/python2.7/site-packages/keras/utils/generic_utils.py", line 122, in deserialize_keras_object raise ValueError('Improper config format: ' + str(config)) ValueError: Improper config format: {'layers': [{'class_name': 'InputLayer', 'config': {... 方法存在问题。但是我尝试了不同版本的一系列模型,包括内置的Keras model_from_config()和在该脚本中定义的简单单层MLP。所有都抛出相同的错误。

ResNet50方法似乎想在keras.utils.generic_utils.deserialize_keras_object()字典(see source)中找到关键字"class_name""config"。在检查config创建的config字典时,没有这样的条目;而是有键:

  • get_config()
  • "input_layers"
  • "layers"
  • "name"

我还打开了一个问题https://github.com/fchollet/keras/issues/7232并创建了一个Gist,您可以自己运行并查看错误。 https://gist.github.com/9thDimension/e1cdb2cd11f11309bfaf297b276f7456

  • Keras 2.0.6
  • Tensorflow 1.1.0

2 个答案:

答案 0 :(得分:3)

无论出于何种原因,keras.models.Model.get_config()返回的字典对象与keras.models.model_from_config()方法不兼容,无法重新模仿模型。

我将这些内容替换为keras.models.Model.model_to_json()keras.models.model_from_json()的同等号码,并且能够成功进行。

答案 1 :(得分:3)

keras.models.Model.get_config()的倒数似乎是keras.models.Model.from_config(),而不是keras.models.model_from_config() https://keras.io/models/about-keras-models/。试试吧?