Прогнозировать классификатор активности CoreML в python с различной формой ввода

#python #multiclass-classification #coremltools

Вопрос:

Я пытаюсь использовать модель ActivityClassifier Apple CoreML в python для прогнозирования. Я использую набор тестовых данных, который был создан точно так же, как набор данных ПОЕЗДА был создан для этой модели. Когда я загружаю модель и получаю ее входное описание, оно показывает, что входная форма равна 100 для всех входных переменных, но в наборе данных было/есть только 52 точки данных для каждого образца

 import coremltools as ct
model_path = './path/to/my_model.mlmodel'
model = ct.models.MLModel(model_path) 
print(model.get_spec().description.input)
 

Вот одно входное значение из приведенного выше оператора печати:

 name: "acceleration_x"
shortDescription: "acceleration_x window input"
type {
  multiArrayType {
    shape: 100
    dataType: DOUBLE
    enumeratedShapes {
      shapes {
        shape: 100
      }
      shapes {
        shape: 52
      }
    }
  }
}
 

Вы можете видеть, что я уже пытался добавить входную длину 52 (длину тестовых данных) в спецификацию модели, аналогичную тому, что можно найти здесь: https://apple.github.io/coremltools/docs-api-version3/generated/coremltools.models.neural_network.flexible_shape_utils.html

Когда я пытаюсь сделать прогноз с помощью этого набора входных данных, я получаю следующую ошибку:

 import numpy as np
import pandas as pd
input_cols = [x.name for x in model.get_spec().description.input if x.name != 'stateIn']
input = pd.read_csv('./path/to/test_file.csv')
model.predict({input_name: np.array(input[input_name]) for input_name in input_cols})
 
 Traceback (most recent call last):
File "<input>", line 36, in <module>
  File "/Users/username/miniconda3/envs/env_name/lib/python3.8/site-packages/coremltools/models/model.py", line 329, in predict
    return self.__proxy__.predict(data, useCPUOnly)
RuntimeError: {
    NSLocalizedDescription = "Failure dynamically resizing for sequence length.";
}
 

Что нужно сделать с моделью и/или данными, чтобы модель могла правильно прогнозировать?