【keras】models.load_model() 报错问题 Unknown entry in loss dictionary:

在试用tf2.0.keras建立的一个简单的神经网络时,发现模型保存之后重新加载会出问题

代码如下:

# 创建模型
inputs = tf.keras.Input(shape= (17,),name= 'inputs')
hidden_1 = layers.Dense(48,activation='linear',name= 'hidden_1')(inputs)
dropout_1 = layers.Dropout(rate= 0.1,seed= 10,name= 'dropout_1')(hidden_1)
outputs = layers.Dense(93,activation='linear',name= 'outputs')(dropout_1)
model = tf.keras.Model(inputs= inputs,outputs= outputs,name= 'model_T')
# 模型摘要
model.summary()

# 模型编译
model.compile(optimizer= tf.keras.optimizers.Adam(learning_rate= 0.001),
              loss= tf.losses.MeanSquaredError(),
              metrics= [])

# 训练
history = model.fit(x= data_train[:,idx_bt],
                    y= data_train[:,idx_t],
                    batch_size= None,
                    epochs= 50,
#                     validation_split= 0.1,
                    validation_data=(data_test[:,idx_bt],data_test[:,idx_t]),
                    verbose= 1)

# 保存模型
model.save('model_save.h5')

#加载模型
# del model
model = tf.keras.models.load_model('model_save_5.h5')

报错:

ValueError: Unknown entry in loss dictionary: class_name. Only expected following keys: ['outputs']

后来发现在model.compile()中,loss那里,把 tf.losses.MeanSquaredError() 改成 'mean_squared_error',即:

# 模型编译
model.compile(optimizer= tf.keras.optimizers.Adam(learning_rate= 0.001),
              loss= 'mean_squared_error',metrics= [])

即可加载成功。

你可能感兴趣的:(学习随笔)