Python Google Cloud ML模型版本创建错误

Python Google Cloud ML模型版本创建错误,python,tensorflow,keras,google-cloud-platform,Python,Tensorflow,Keras,Google Cloud Platform,我试图在Google Cloud ML上部署一个简单的模型,该模型是使用tensorflow和keras构建的。这是我的建模代码 from keras.optimizers import adam # define the keras model model = Sequential() model.add(Dense(12, input_dim=14, activation='relu')) model.add(Dense(14, activation='relu')) model.add(D

我试图在Google Cloud ML上部署一个简单的模型,该模型是使用tensorflow和keras构建的。这是我的建模代码

from keras.optimizers import adam
# define the keras model
model = Sequential()
model.add(Dense(12, input_dim=14, activation='relu'))
model.add(Dense(14, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# compile the keras model
opt = adam(lr=0.001, decay=1e-6)
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
# fit the keras model on the dataset
model.fit(X, Y, epochs=1, batch_size=10)
# evaluate the keras model
_, accuracy = model.evaluate(X, Y)
print('Accuracy: %.2f' % (accuracy*100))
我还创建了一个自定义预测文件

%%writefile model_prediction.py

import os
import pickle
import numpy as np


class CustomModelPrediction(object):

    def __init__(self, model, processor):
        self._model = model
        self._processor = processor

    def _postprocess(self, predictions):
        labels = ['lbl1', 'lbl2']
        return [
            {
                "label":labels[int(np.round(prediction))],
                "score":float(np.round(prediction,4))
            } for prediction in predictions]

    def predict(self, instances, **kwargs):
        preprocessed_data = np.array(self._processor.transform(instances))
        predictions =  self._model.predict(preprocessed_data)
        labels = self._postprocess(predictions)
        return labels

    @classmethod
    def from_path(cls, model_dir):
        import tensorflow.keras as keras
        model = keras.models.load_model(
            os.path.join(model_dir,'keras_saved_model.h5'))
        with open(os.path.join(model_dir, 'processor_state.pkl'), 'rb') as f:
            processor = pickle.load(f)
        return cls(model, processor)
设置这些参数

MODEL_NAME='keras_test'
VERSION_NAME='v1'
RUNTIME_VERSION='1.13'
REGION='europe-west1'
当我尝试创建一个版本时

!gcloud beta ai-platform versions create {VERSION_NAME} \
--model {MODEL_NAME} \
--origin gs://{BUCKET}/{MODEL_DIR} \
--python-version 3.5 \
--runtime-version {RUNTIME_VERSION} \
--package-uris gs://{BUCKET}/{PACKAGES_DIR}/classifier_test-0.1.tar.gz \
--prediction-class=model_prediction.CustomModelPrediction
我得到以下错误

Create Version failed. Bad model detected with error:  "Failed to load model: Unexpected error when loading the model: Unexpected keyword argument passed to optimizer: learning_rate (Error code: 0)
然而,预测类似乎在我的本地机器上工作得很好


我哪里出错了?

您是否可能混合了tf和keras的导入,正如您提到的,这是一个tensorflow模型。。。如果您使用tf.keras.optimizers.AdamI无法复制该问题,会发生什么情况?您如何使用keras或tf.keras保存您的模型?另外,您在本地环境中使用的是什么版本?因此,我的模型是
model=tf.keras.models.model(model\u输入,model\u输出)
。也在做
!sudo pip安装keras--升级
解决了此错误。但它开始出现新的错误:
创建版本(这可能需要几分钟)…失败。错误:(gcloud.beta.ai platform.versions.create)创建版本失败。检测到错误的模型:“加载模型失败:加载模型时出现意外错误:('Unrecogned keyword arguments:',dict_keys(['ragged']))(错误代码:0)”
另外@PaddypoEye您可以尝试复制此模型。我发现问题也发生在这里,你是否可能混合了tf和keras的进口,正如你提到的,这是一个tensorflow模型。。。如果您使用tf.keras.optimizers.AdamI无法复制该问题,会发生什么情况?您如何使用keras或tf.keras保存您的模型?另外,您在本地环境中使用的是什么版本?因此,我的模型是
model=tf.keras.models.model(model\u输入,model\u输出)
。也在做
!sudo pip安装keras--升级
解决了此错误。但它开始出现新的错误:
创建版本(这可能需要几分钟)…失败。错误:(gcloud.beta.ai platform.versions.create)创建版本失败。检测到错误的模型:“加载模型失败:加载模型时出现意外错误:('Unrecogned keyword arguments:',dict_keys(['ragged']))(错误代码:0)”
另外@PaddypoEye您可以尝试复制此模型。我发现这个问题也发生在这里