gcloud - Gcloud ai-platform,无法使用自己的预测类创建模型
问题描述
我尝试按照 AI Platform教程上传模型和预测例程,但有一部分失败了,我不明白为什么。
我的预测类与他们的教程中的相同:
%%writefile predictor.py
import os
import pickle
import numpy as np
from sklearn.datasets import load_iris
from sklearn.externals import joblib
class MyPredictor(object):
def __init__(self, model, preprocessor):
self._model = model
self._preprocessor = preprocessor
self._class_names = load_iris().target_names
def predict(self, instances, **kwargs):
inputs = np.asarray(instances)
preprocessed_inputs = self._preprocessor.preprocess(inputs)
if kwargs.get('probabilities'):
probabilities = self._model.predict_proba(preprocessed_inputs)
return probabilities.tolist()
else:
outputs = self._model.predict(preprocessed_inputs)
return [self._class_names[class_num] for class_num in outputs]
@classmethod
def from_path(cls, model_dir):
model_path = os.path.join(model_dir, 'model.joblib')
model = joblib.load(model_path)
preprocessor_path = os.path.join(model_dir, 'preprocessor.pkl')
with open(preprocessor_path, 'rb') as f:
preprocessor = pickle.load(f)
return cls(model, preprocessor)
我用来在云中创建模型的代码是:
! gcloud beta ai-platform versions create {VERSION_NAME} \
--model {MODEL_NAME} \
--runtime-version 1.13 \
--python-version 3.5 \
--origin gs://{BUCKET_NAME}/custom_prediction_routine_tutorial/model/ \
--package-uris gs://{BUCKET_NAME}/custom_prediction_routine_tutorial/my_custom_code-0.1.tar.gz \
--prediction-class predictor.MyPredictor
但我最终遇到了这样一个奇怪的错误:
ERROR: (gcloud.beta.ai-platform.versions.create) Bad model detected with error: "Failed to load model: Unexpected error when loading the model: 'ascii' codec can't decode byte 0xf9 in position 2: ordinal not in range(128) (Error code: 0)"
问题是,当我运行相同的命令时没有:
--prediction-class predictor.MyPredictor
它工作正常。
有人知道这是什么原因吗?我认为model.joblib
可能有编码问题但是当我自己加载它时没有任何问题
解决方案
我找到了解决办法
在教程中,他们使用 pickle 来保存创建的预处理器对象,并使用 Joblib 来保存模型。
您需要使用 Joblib 保存两者,然后将其发送到谷歌存储。
推荐阅读
- javascript - Owl Carousel 单击时更改元素的内容
- flutter - 无法访问内置声明“kotlin.String”。确保你对 Flutter 中的 Kotlin 标准库有依赖
- python - 在不检索数据的情况下检查 firestore 文档是否存在
- java - VideoView 在 android studio 中无法正常工作
- flutter - 构建网络时语音到文本的错误
- java - 带有新标头的 Spring WebClient 重试逻辑
- amazon-web-services - 使用 VertX HttpClient 访问 AWS WebSocket
- mongodb - 如何在给定距离(地理空间查询)内搜索标签/关键字(全文搜索)?
- python - ModuleNotFoundError:没有名为“ckeditor”的模块,我该如何解决?
- javascript - 即使仅在页面刷新 OAuth2 一次后如何保持登录谷歌选择器