首页 > 解决方案 > Keras ValueError 尝试加载模型

问题描述

我正在使用 Anaconda Navigator,确切地说是 Jupyter。

import tensorflow as tf 
from tensorflow import keras
print(tf.__version__)
>>> 1.14.0

这是我的模型

def create_model():
  model = tf.keras.Sequential([
    keras.layers.Dense(86, activation='relu', kernel_regularizer=keras.regularizers.l2(0.0001),input_shape=(129,)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(142, activation='relu', kernel_regularizer=keras.regularizers.l2(0.0001)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(4, activation='softmax')
    ])
  return model

model = create_model()

# Display the model's architecture
model.summary()

在训练、预测和评估我的模型之后,我决定使用

model.save('/Users/Jennifer/myproject/my_model.h5') 

我用 h5py 文件检查了目录和文件夹。我决定使用

new_model1 = tf.keras.models.load_model('/Users/Jennifer/myproject/my_model.h5')

我有一个错误

ValueError: Unknown entries in loss dictionary: ['class_name', 'config']. Only expected following keys: ['dense_17']

请帮我。我应该怎么办?我几乎花了一整天的时间来解决这个问题。谢谢

标签: tensorflowkeras

解决方案


这是一个只加载权重的解决方法:

#!/usr/bin/env python3

from tensorflow import keras
import os


def create_model():
  model = keras.Sequential([
    keras.layers.Dense(86, activation='relu', kernel_regularizer=keras.regularizers.l2(0.0001),input_shape=(129,)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(142, activation='relu', kernel_regularizer=keras.regularizers.l2(0.0001)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(4, activation='softmax')
    ])
  return model

if os.path.exists("junk.h5"):
    model = create_model()
    model.load_weights("junk.h5")

else:
    model = create_model()
    model.compile(optimizer=keras.optimizers.Adam(0.0001), loss=keras.losses.CategoricalCrossentropy(from_logits=True), metrics=['accuracy'])
    model.save("junk.h5")

另一种解决方法是在没有优化器的情况下保存模型

model.save("junk.h5", include_optimizer=False)

看起来您正在使用的损失函数创建了一个包含无效键的字典。这听起来像是 keras/tensorflow 中的错误。这就是 colab 可能工作的原因,因为它使用的是更新版本。


推荐阅读