Keras ValueError尝试加载模型

时间:2020-05-29 11:03:40

标签: tensorflow keras

我正在使用Juacter的Anaconda Navigator,

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']

请帮助我。我该怎么办?我几乎整天都在尝试解决此问题。谢谢

1 个答案:

答案 0 :(得分:0)

这里有一些工作可以减轻重量:

#!/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可能起作用的原因,因为它使用的是更新版本。