0

我剪掉了代码,因为它非常耐用,这里是学习率调度器的代码,模型使用该优化器。

initial_learning_rate = 0.001
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate,
    decay_steps=100000,
    decay_rate=0.96,
    staircase=False) 

opt=tf.keras.optimizers.SGD(learning_rate=lr_schedule)

这是模型保存代码。我在model.fit之后保存了它

midmodel_2.save('../HY/HY_history/5fold/{}'.format(model_name2))
with open('../HY/HY_history/5fold/{}'.format(model_history_name2), 'wb') as f:
    pickle.dump(history.history, f)
midmodel_2.save_weights('../HY/HY_history/5fold/{}'.format(model_weight2))

加载模型代码在这里

import keras
from keras.models import load_model

loaded_model=load_model('./mobilenetv2_epoch50_fold1_210402_Adagrad_AugNo_25_freeze_schYes.h5')
loaded_model.load_weights('./mobilenetv2_epoch50_fold1_210402_Adagrad_AugNo_25_freeze_schYesw.h5')

这是我遇到的错误,在此屏幕截图中,我没有使用 GPU,但即使在控制台中使用 gpu 也会引发相同的错误。

Exception has occurred: ValueError
Attempt to convert a value ({'class_name': 'ExponentialDecay', 'config': {'initial_learning_rate': 0.001, 'decay_steps': 100000, 'decay_rate': 0.96, 'staircase': False, 'name': None}}) with an unsupported type (<class 'dict'>) to a Tensor.
  File "D:\lab2\2021_cell\code\load_test\test.py", line 8, in <module>
    `loaded_model=load_model('./mobilenetv2_epoch50_fold1_210402_Adagrad_AugNo_25_freeze_schYes.h5')`

我确实使用'tensorflowjs_converter'将model.h5文件转换为model.json,但它也无法加载模型。有没有办法在没有培训的情况下加载它并再次将其保存为 json 格式?

4

1 回答 1

0

我找到了一些方法来解决这个问题,但不知道为什么会这样。

如果您对具有学习调度程序的负载模型感到困难,将模型保存到 json 文件并将权重保存到 h5 文件很有帮助。然后一起加载

这是一些例子

filename = path + '/' + model_name
weightname = path + '/' + model_name[:-5] +'_weight.h5'

        
json_file = open(filename, 'r') 
model = json_file.read()
json_file.close()
model =model_from_json(model)
model.load_weights(weightname)
        
model.compile(optimizer=SGD, loss='categorical_crossentropy', metrics=['acc','Precision', 'Recall']) 
        

在这种情况下,您必须先编译模型,然后再进行预测或其他操作。

于 2021-04-15T07:25:43.337 回答