Python 加载keras模型时的未知度量错误

Python 加载keras模型时的未知度量错误,python,tensorflow,keras,metrics,Python,Tensorflow,Keras,Metrics,我训练了我的回归模型,没有任何问题。完美的训练和测试。 我使用model.save(model\u文件名)来保存它。 当我尝试使用model=load\u model(model\u filename)加载模型时,我得到以下错误 ValueError:未知的度量函数:{'class_name': 'RootMeanSquaredError','config':{'name':'root_mean_squared_error', 'dtype':'float32'} 知道发生了什么事吗 以下是我的

我训练了我的回归模型,没有任何问题。完美的训练和测试。 我使用
model.save(model\u文件名)
来保存它。 当我尝试使用
model=load\u model(model\u filename)
加载模型时,我得到以下错误

ValueError:未知的度量函数:{'class_name': 'RootMeanSquaredError','config':{'name':'root_mean_squared_error', 'dtype':'float32'}

知道发生了什么事吗

以下是我的模型定义:

def RegressionCNN2(input_shape,learning_rate):
    model = Sequential()
    #model.add(keras.Input(shape = input_shape))
    #model.add(Dense(256, activation='relu', input_dim=366))
    #model.add(Conv2D(64, (3, 3), activation='relu',input_shape=input_shape))
    model.add(Conv2D(128, (3, 3), activation='relu',input_shape=input_shape))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Conv2D(64, (3, 3), init='uniform'))

    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Flatten())

    model.add(Dense(512, activation='relu'))
    model.add(Dropout(0.1))

    model.add(Dense(256, activation='relu'))
    model.add(Dense(128, activation='relu'))

    model.add(Dense(1, activation='linear'))
    opt = keras.optimizers.Adam(learning_rate=learning_rate)

    model.compile(loss='mean_squared_error', 
                      optimizer=opt,
                      metrics=[tf.keras.metrics.RootMeanSquaredError()] 
                     )
    return model
培训代码:

# Create model
    model = RegressionCNN2((netH,netW,3),learning_rate)
    
    print(train_ims.shape,train_labels.shape)
    # Train model
    
    model.fit(train_ims, train_labels,
              batch_size=batch_size,
              epochs=epochs,
              verbose=2,
              validation_data=(valid_ims, valid_labels),
              shuffle = True,
              use_multiprocessing = True,
              callbacks=my_callbacks)
提前谢谢

----更新---

我保存了权重和体系结构,而不是使用model.save(),加载后我重新编译了模型,工作正常。如果你有其他选择的话,我很乐意听到。以下是我的解决方案:

json_file = open('net_name.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# load weights into new model
loaded_model.load_weights('net_name.h5')
print("Loaded model from disk")
model.compile(loss='mean_squared_error',
                      optimizer=opt,
                      metrics=[tf.keras.metrics.RootMeanSquaredError()] 
                     )
----更新2----

这是一个版本控制问题。 使用
model=tf.keras.models.load\u model(model\u name)
解决了这个问题。
然而,一般来说,存储权重和体系结构并只是重新编译似乎是一种更为稳健的方法,因为它跨版本工作

您可以发布用于加载模型的所有代码吗?model=load_model(net_name)这有帮助吗?我确实检查了这一点,但在我的情况下,我没有定义任何自定义指标。。。我只是使用keras作为默认指标。。。这就是为什么我感到困惑的原因,这并不是所有的代码,当然,你是在用一个keras版本训练模型,然后用另一个版本加载它。那是行不通的。