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()