Как использовать модель tencflow ncf для прогнозирования? - PullRequest
1 голос
/ 12 марта 2020

Привет, я новичок в тензорном потоке и нейронных сетях. Попытка понять рекомендательную модель ncf в официальном репозитории tenorflow.

Насколько я понимаю, вы строите модель с входными слоями и слоями обучения. Затем вы создаете пакеты данных для обучения модели, а затем используете тестовые данные для оценки модели. Это сделано в этом файле .

Однако у меня возникают проблемы с пониманием входных слоев.

Это показано в коде

user_input = tf.keras.layers.Input(
      shape=(1,), name=movielens.USER_COLUMN, dtype=tf.int32)

Насколько я понимаю, вы можете вводить один параметр за один раз.

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

user_input = np.full(shape=(256,),fill_value=1, dtype=np.int32)
item_input = np.full(shape=(256,),fill_value=1, dtype=np.int32)
valid_pt_mask_input = np.full(shape=(256,),fill_value=True, dtype=np.bool)
dup_mask_input = np.full(shape=(256,),fill_value=1, dtype=np.int32)
label_input = np.full(shape=(256,),fill_value=True, dtype=np.bool)
test_input_list = [user_input,item_input,valid_pt_mask_input,dup_mask_input,label_input]

tf.print(keras_model.predict_on_batch(test_input_list))

Когда я запускаю следующий код:

    user_input = np.full(shape=(1,),fill_value=1, dtype=np.int32)
    item_input = np.full(shape=(1,),fill_value=1, dtype=np.int32)
    valid_pt_mask_input = np.full(shape=(1,),fill_value=True, dtype=np.bool)
    dup_mask_input = np.full(shape=(1,),fill_value=1, dtype=np.int32)
    label_input = np.full(shape=(1,),fill_value=True, dtype=np.bool)
    test_input_list = [user_input,item_input,valid_pt_mask_input,dup_mask_input,label_input]

    classes = _model.predict(test_input_list)
    tf.print(classes)

Я получаю эту ошибку:

tensorflow.python.framework.errors_impl.InvalidArgumentError:  Input to reshape is a tensor with 1 values, but the requested shape requires a multiple of 256
     [[{{node model_1/metric_layer/StatefulPartitionedCall/StatefulPartitionedCall/Reshape_1}}]] [Op:__inference_predict_function_2828]

Может кто-нибудь помочь мне с тем, как использовать эту модель для прогнозирования с помощью одного входа? А также, почему item_id требуется с user_id при создании прогноза? Разве вы не должны предоставлять список пользователей, модель возвращает список элементов?

1 Ответ

0 голосов
/ 12 марта 2020

Я не использовал модель ncf ранее, но похоже, что вы вводите данные тренировки в виде 1 выборки с 256 функциями вместо 256 выборок, каждая с 1 функцией. Просто переверните ваши numpy массивы, убедитесь, что матрицы объектов являются двумерными, и что число объектов является первым измерением.

user_input = np.full(shape=(1,256),fill_value=1, dtype=np.int32)

... et c для остальных. (ну, метки должны оставаться 1D, как они есть у вас)

Аналогичным образом убедитесь, что во входных данных прогноза матрица объектов 2D:

user_input = np.full(shape=(1,1),fill_value=1, dtype=np.int32)
...