在试用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= [])
即可加载成功。