Sagemaker разреженный JSON вход в машины факторизации - PullRequest
0 голосов
/ 13 апреля 2020

Я прохожу учебник по FM и смог получить прогнозы внутри AWS по тестовым данным, приведенным в блокноте: https://github.com/juliensimon/dlnotebooks/blob/master/sagemaker/03-Factorization-Machines-Movielens.ipynb

Однако сейчас я пытаюсь сделать вывод с моего локального компьютера и передать данные пользователя, для которого сделать вывод, выдает ошибку

ConnectionClosedError: Connection was closed before we received a valid response from endpoint URL:

Это происходит из-за ограничения в 5 МБ для SageMaker API, о чем я знаю, однако я нашел что можно получить разреженный JSON, который можно передать для вывода. Как преобразовать разреженную матрицу в JSON?

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(categories = 'auto')
to_predict = ohe.fit_transform(not_watched_full)

to_predict = to_predict.astype('float32').toarray()

import json
def fm_serializer(data):
    js = {'instances': []}
    for row in data:
        js['instances'].append({'features': row.tolist()})
    # print js
    return json.dumps(js)


payload = fm_serializer(to_predict.toarray())

Этот код дает полезную нагрузку около 50 МБ, что выше, чем 5:)

Единственное отличие, которое я имею от связанного ноутбука что для преобразования в набор данных с горячим кодированием я использую scikit-learn OneHotEncoder с sparse, установленным в True по умолчанию. Это было хорошо на тренировке FM, например.

...