Python 了解google ai平台自定义预测例程的输入

Python 了解google ai平台自定义预测例程的输入,python,google-cloud-platform,google-cloud-ml,google-prediction,Python,Google Cloud Platform,Google Cloud Ml,Google Prediction,我正在遵循有关自定义预测例程的文档,并试图了解自定义预测例程的输入是什么样子的。发送输入的代码如下所示: instances = [ [6.7, 3.1, 4.7, 1.5], [4.6, 3.1, 1.5, 0.2], ] service = discovery.build('ml', 'v1') name = 'projects/{}/models/{}'.format(project, model) if version is not None:

我正在遵循有关自定义预测例程的文档,并试图了解自定义预测例程的输入是什么样子的。发送输入的代码如下所示:

instances = [
        [6.7, 3.1, 4.7, 1.5],
        [4.6, 3.1, 1.5, 0.2],
    ]
service = discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(project, model)

if version is not None:
    name += '/versions/{}'.format(version)

response = service.projects().predict(
    name=name,
    body={'instances': instances}
).execute()
现在的
Predictor.py
非常简单。我只是想了解输入是什么样子的

class Predictor(object):
    """An example Predictor for an AI Platform custom prediction routine."""

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

    def predict(self, instances, **kwargs):

        inputs = np.asarray(instances)
        if kwargs.get('max'):
            return np.argmax(inputs, axis=1)

        return np.sum(inputs)


    @classmethod
    def from_path(cls, model_dir):
        return cls(None)
但是,当我尝试获取响应时,会出现以下错误:

{
  "error": "Prediction failed: unknown error."
}
此外,调试代码非常困难,因为无法单步执行代码或打印日志。。。我不知道发生了什么。。。输入是什么样子的?我应该如何访问它们? 这只是一个简单的测试,但最终我想发送图像,调试起来会更加困难。我将如何接收它们?我将如何在预处理器中预处理它们?让我们假设我在训练时所做的比例分配如下

data = cv2.imread(str(img_path))
data = cv2.resize(data, (224, 224))
data = cv2.cvtColor(data, cv2.COLOR_BGR2RGB)
x = data.astype(np.float32) / 255.
return np.expand_dims(x, axis=0)
实例
对象的外观如何,以便我可以相应地构造预处理器?
提前感谢您。

我正在为自定义预测构建一个新示例,该示例可能有助于您调试: 首先,我通过笔记本(Colab)本地写入文件

另一个选项是,一旦您构建了安装包,您还可以在本地测试安装,其中
my_custom\u code-0.1.tar.gz
是要在AI平台中部署的文件:

 pip install --target=/tmp/custom_lib --no-cache-dir -b /tmp/pip_builds my_custom_code-0.1.tar.gz
另请看一节:


您可以使用
--enable console logging
将日志导出到项目中。您可能需要创建一个新模型。

在没有模型的情况下使用调试代码(在本文发布时)似乎不起作用。我使用以下代码使我的图像预测用例的所有功能都正常工作:

image_filename = 'your image path'
PROJECT_ID = ''
MODEL_NAME = ''
VERSION_NAME = ''

img = base64.b64encode(open(image_filename, "rb").read()).decode()
image_bite_dict = {"key": "0", "image_bytes": {"b64": img}}

instances = [
            image_bite_dict
        ]


service = googleapiclient.discovery.build('ml', 'v1')
    name = 'projects/{}/models/{}/versions/{}'.format(PROJECT_ID, MODEL_NAME, VERSION_NAME)
response = service.projects().predict(
        name=name,
        body={'instances': instances}
    ).execute()

非常感谢你的回答。如果我复制您的第二个和第三个代码段,一切都会正常工作,因为我知道要传递什么。但是,如果我部署在谷歌人工智能平台上,并且我传递了用JSON包装的输入(如这里所解释的),我会得到一个错误,而且我认为我正在失去对我实际接收到的内容的理解。如果我进入AI平台>模式>点击我的模型>点击我的版本>测试和使用,在那里我粘贴了一个JSON输入示例,我会得到
“错误”:“遇到内部错误”。
。此外,我已经启用了
--启用控制台日志记录
(希望非常有用),但是我现在在哪里找到日志呢?如何写入日志?谢谢,你能同时看看这个样品吗?我将提供更多信息我没有运行笔记本,但我遵循我的示例中的所有步骤。我运行了你的笔记本,它运行良好(毫不奇怪)。但是如果我用我的代码更改Predictor.predict(没有其他更改),它将失败,并出现相同的错误。。。也许你也可以尝试复制错误。调试起来仍然很困难,我仍然无法让它工作。您能确切地告诉我您是如何保存模型以供部署的吗?您还可以添加预测类的示例吗?在创建模型时,您可以使用
--启用控制台日志记录
,以将日志输出启用到StackDriver日志记录
 pip install --target=/tmp/custom_lib --no-cache-dir -b /tmp/pip_builds my_custom_code-0.1.tar.gz
image_filename = 'your image path'
PROJECT_ID = ''
MODEL_NAME = ''
VERSION_NAME = ''

img = base64.b64encode(open(image_filename, "rb").read()).decode()
image_bite_dict = {"key": "0", "image_bytes": {"b64": img}}

instances = [
            image_bite_dict
        ]


service = googleapiclient.discovery.build('ml', 'v1')
    name = 'projects/{}/models/{}/versions/{}'.format(PROJECT_ID, MODEL_NAME, VERSION_NAME)
response = service.projects().predict(
        name=name,
        body={'instances': instances}
    ).execute()