Keras TimeDistributed Dense с softmax не нормируется за шаг по времени - PullRequest
0 голосов
/ 05 февраля 2019

Эта проблема оказалась не такой, как в вопросе

У меня есть очень простая модель Keras, которая принимает данные временных рядов.Я хочу использовать рекуррентный слой, чтобы предсказать новую последовательность тех же измерений, с softmax на конце, чтобы обеспечить нормализованный результат на каждом временном шаге.

Так выглядит моя модель.

x = GRU(256, return_sequences=True)(x)
x = TimeDistributed(Dense(3, activation='softmax'))(x)

Представьте, что входные данные выглядят примерно так:

[
  [0.25, 0.25, 0.5],
  [0.3, 0.3, 0.4],
  [0.2, 0.7, 0.1],
  [0.1, 0.1, 0.8]
]

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

[
  [0.15, 0.35, 0.5],
  [0.35, 0.35, 0.3],
  [0.1, 0.6, 0.3],
  [0.1, 0.2, 0.7]
]

НоНа самом деле я получаю результат, в котором сумма элементов в каждой строке фактически равна четверти (или любой другой части числа строк), а не 1.

Проще говоря, я думал, что идея TimeDistributed заключалась впримените слой Dense к каждому временному шагу, чтобы эффект Dense с активацией softmax применялся повторно для каждого временного шага.Но я, кажется, получаю результат, который выглядит так, как будто он нормализован по всем элементам выходной матрицы временных шагов.

Поскольку мне кажется, что я неправильно понимаю, есть ли способ получить результат Dense softmax для каждогошаг по времени (нормализованный к 1 на каждом шаге) без необходимости последовательного прогнозирования каждого временного шага?

1 Ответ

0 голосов
/ 06 февраля 2019

Похоже, что проблема была не в обработке Softmax с оболочкой TimeDistributed, а в ошибке в моей функции прогнозирования, которая суммировалась по всей матрице, а не по строкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...