Как исправить: "ошибка": "Ошибка прогноза: неизвестная ошибка". в настраиваемой программе прогнозирования с помощью scikit-learn?

Я пытаюсь написать настраиваемую процедуру прогнозирования на платформе AI Google, используя MLPClassifier scikit-learn. Я успешно упаковал и развернул модель, но когда я запрашиваю онлайн-прогнозы черезgcloud ai-platform predict, ошибка я получаю ошибку "error": "Prediction failed: unknown error." Затем я подошел к консоли, чтобы проверить свою модель вручную в разделе "Тестирование и использование" моей модели, и получил ту же ошибку.

Обучающие векторы представляют собой несколько массивов с 6 элементами (например, [1,2,3,4,5,6]), а цели - 0, 1 или 2.

Вот мой код preprocess.py:

import numpy as np
class MySimpleScaler(object):
  def __init__(self):
    self._means = None
    self._stds = None

  def preprocess(self, data):
    if self._means is None: # during training only
      self._means = np.mean(data, axis=0)

    if self._stds is None: # during training only
      self._stds = np.std(data, axis=0)
      if not self._stds.all():
        raise ValueError('At least one column has standard deviation of 0.')

    return (data - self._means) / self._stds

Вот мой код predictor.py:

import os
import pickle
import numpy as np
from sklearn.externals import joblib
from sklearn.neural_network import MLPClassifier

class MyPredictor(object):
  def __init__(self, model, preprocessor):
    self._model = model
    self._preprocessor = preprocessor
    self._class_names = ["0-6 months", "7-18 months", "18+ months"]

  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)

Вот код, в котором я обучаю и экспортирую свою модель:

scaler = MySimpleScaler()
y = data[:, [0]]
features_scaled = scaler.preprocess(data[:, 1:])
scaled_data = np.concatenate((y, features_scaled), 1) # put the scaled features and the y column back 
    together
X = scaled_data[:, 1:]
clf = MLPClassifier()
clf.fit(X, y)

# export the model
joblib.dump(clf, 'model.joblib')
with open ('preprocessor.pkl', 'wb') as f:
    pickle.dump(scaler, f)

setup.py:

from setuptools import setup

setup(
    name='my_custom_code',
    version='0.1',
    include_package_data=True,
    scripts=['predictor.py', 'preprocess.py'])

Я пробовал выполнять онлайн-прогнозы с файлом input.json, который выглядит следующим образом

[1,2,3,4,5,6]

с этой командой

gcloud ai-platform predict --version $CORRECT_VERSION --model $CORRECT_MODEL --json-instances 
   input.json

и я получаю ошибку выше. Может кто-нибудь помочь? Хотелось бы, чтобы у Google AI Platform были более информативные сообщения об ошибках.

0 ответов

Другие вопросы по тегам