【问题标题】:ValueError: Unknown layer:name when loading a keras modelValueError:未知层:加载 keras 模型时的名称
【发布时间】:2019-06-14 15:08:05
【问题描述】:

我已经训练了一个 CNN 并相应地保存了它:

model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy', metrics=['accuracy'])

model.fit(train_data, train_labels,
          epochs=epochs,
          batch_size=batch_size,
          validation_data=(validation_data, validation_labels))
model.save('full_model.h5')

我现在尝试使用以下命令在另一个 python 脚本中加载模型:

model = tf.keras.models.load_model('full_model.h5')

并收到以下错误:

    Traceback (most recent call last):
  File "/media/spt/Data/tensorflow_server/get_model.py", line 12, in <module>
    model = tf.keras.models.load_model('full_model.h5')
  File "/home/spt/.conda/envs/dev_env/lib/python3.6/site-packages/tensorflow/python/keras/engine/saving.py", line 229, in load_model
    model = model_from_config(model_config, custom_objects=custom_objects)
  File "/home/spt/.conda/envs/dev_env/lib/python3.6/site-packages/tensorflow/python/keras/engine/saving.py", line 306, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "/home/spt/.conda/envs/dev_env/lib/python3.6/site-packages/tensorflow/python/keras/layers/serialization.py", line 64, in deserialize
    printable_module_name='layer')
  File "/home/spt/.conda/envs/dev_env/lib/python3.6/site-packages/tensorflow/python/keras/utils/generic_utils.py", line 173, in deserialize_keras_object
    list(custom_objects.items())))
  File "/home/spt/.conda/envs/dev_env/lib/python3.6/site-packages/tensorflow/python/keras/engine/sequential.py", line 286, in from_config
    layer = layer_module.deserialize(conf, custom_objects=custom_objects)
  File "/home/spt/.conda/envs/dev_env/lib/python3.6/site-packages/tensorflow/python/keras/layers/serialization.py", line 64, in deserialize
    printable_module_name='layer')
  File "/home/spt/.conda/envs/dev_env/lib/python3.6/site-packages/tensorflow/python/keras/utils/generic_utils.py", line 193, in deserialize_keras_object
    function_name)
ValueError: Unknown layer:name

我遇到过不止一个网站描述相同/相似的问题,例如stack overflowgithub。通常,问题是 Keras 的过时版本。但就我而言,所有与 Keras 相关的软件包都是最新的(所有 keras 相关软件包的 conda 列表的输出):

keras-applications        1.0.6                    py36_0
keras-base                2.2.4                    py36_0
keras-gpu                 2.2.4                         0
keras-preprocessing       1.0.5                    py36_0

谁能建议我如何解决/解决这个问题?

【问题讨论】:

  • 您使用tensorflowtf.keras 的哪个版本(tf.VERSIONtf.keras.__version__)?这个模型是通过keras 还是tf.keras 定义的,为什么你使用tf.keras 上传模型,而不是keras
  • 尝试使用来自keras.modelsload_model
  • 我是 TF 和 Keras 的新手,不知道 keras 和 tf.keras 是不同的。在阅读了你的 cmets 之后,我更新了我的 TF,现在它可以工作了。非常感谢!我正在使用 tf.keras,因为我正在尝试使用 TF Serving
  • 对于仍在为类似问题苦苦挣扎的任何人,请参阅@M。维亚兹对stackoverflow.com/questions/53183865/…的回答(和我的评论)@
  • 我真希望有人能回答这个问题

标签: python tensorflow keras valueerror


【解决方案1】:

我遇到了同样的问题,当我更新我的 Tensorflow 和 Keras 版本时它已经解决了

【讨论】:

  • Tensorflow 1.13.1 和 keras 2.4
【解决方案2】:

如果您使用的是自定义层,您可以加载具有如下层的 keras 模型:

model = keras.models.load_model(model_path, custom_objects={'MyCustomLayer': InstanceOfMyCustomLayer})

【讨论】:

    【解决方案3】:

    我在使用 tf.keras.models.load_model 加载自定义训练的 EfficientNetB3 模型时遇到了类似问题。使用from efficientnet.tfkeras import EfficientNetB3 导入 EfficientNetB3 模型解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 2020-06-24
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2019-04-10
      相关资源
      最近更新 更多