керас: вычисление расчета внутри источника для умножения веса на вход - PullRequest
5 голосов
/ 18 апреля 2019

Интуиция:

Я создал Автоэнкодер , хотя он предназначен для Матрицы рейтинга для пользователей против фильмов. Я пытаюсь воссоздать вывод по прогнозированию с использованием совместной фильтрации (CF).

Набор данных:

Набор данных, приведенный ниже, показывает, как вводится вход. Я преобразовал его в матрицу Pivot здесь: Мы назовем это A_set

MovieId 1    2    3    4    5    6    7  ...
UserId
0       5.0  0.0  0.0  0.0  2.0  0.0  0.0  ...
1       0.0  0.0  0.0  2.0  2.0  0.0  0.0  ...
2       5.0  0.0  1.0  0.0  0.0  0.0  0.0  ...
3       1.0  0.0  0.0  0.0  3.0  0.0  3.0  ... 

Создается также транспонирование, где MovieIds в строках и UserIds в столбцах. Мы назовем это B_set.

Анкета:

По этому поводу у меня есть следующие запросы:

  • Какой набор (A / B) можно назвать Коллаборативной фильтрацией (CF) при подаче входных данных на авто-кодировщик (выполненный с использованием Keras) в нейронной сети?
  • Я пытаюсь разграничить, какая часть является CF на основе пользователя и CF на основе элемента
  • Теперь я внутренне знаю, как математически работает приведенная ниже формула. Я просто не уверен, работает ли он так же в коде Keras / TF. Какой из них (набор A / B) я должен считать своим CF?

Y = Тета (Транспонирование). Вход (X) + C

  • Тета, являющаяся матрицей весов, мне нужно посмотреть, транспонирует ли код матрицу Тета, а затем решает уравнение или она уже транспонирована, и вводимые мной данные должны быть B_set, чтобы сделать справедливость до CF.

Я попытался дать A_set в качестве входных данных, а затем также проверил веса после того, как вход был обучен / смоделирован. Проверьте фрагмент:

w1 = model.get_weights()
train_set.shape # (5436, 3706)
w1[0].shape     # (3706, 529)
w1[0].T.shape   # (529, 3706)
w1[1].T.shape   # (529,)
w1[2].T.shape   # (264, 529)
w1[3].T.shape   # (264,)
w1[4].T.shape   # (132, 264)
w1[5].T.shape   # (132,)
w1[6].T.shape   # (264, 132)
w1[7].T.shape   # (264,)
w1[8].T.shape   # (529, 264)
w1[9].T.shape   # (529,)
w1[10].T.shape  # (3706, 529)
w1[11].T.shape  # (3706,)

Теперь имеет смысл, что это, вероятно, где-то Транспонирование где-то внутри Исходного кода Keras (пожалуйста, укажите, где!), Иначе умножение Матрицы было бы невозможно. И все же остается открытым вопрос о том, какой (набор A / B) можно назвать CF?

...