Как правило, проблемы с несколькими классами соответствуют моделям, выдающим распределение вероятностей по набору классов (которое обычно оценивается по сравнению с однократным кодированием фактического класса посредством кросс-энтропии). Теперь, независимо от того, структурируете ли вы его как один единственный выход, два выхода, 49 выходов или 49 х 2 = 98 выходов, это будет означать наличие 1200 х 49 + 1300 х 49 = 122 500 единиц вывода - что не то, что компьютер не может сделать. ручка, но, возможно, не самая удобная вещь. Вы можете попробовать, чтобы каждый вывод класса был одной (например, линейной) единицей и округлял ее значение, чтобы выбрать метку, но, если метки не имеют какого-либо числового значения (например, порядок, размеры и т. д.), это вряд ли сработает .
Если порядок элементов на входе имеет какое-то значение (то есть его перетасовка повлияет на результат), я думаю, что подойду к проблеме через RNN, например, LSTM или двунаправленную модель LSTM, с двумя выходами. Используйте слои softmax return_sequences=True
и TimeDistributed
Dense
для выходных данных, и для каждого 118-длинного ввода у вас будет 118 пар выходных данных; затем вы можете просто использовать временное взвешивание выборки, чтобы отбросить, например, первые 69 (или, может быть, сделать что-то вроде отбрасывания 35 первых и 34 последних, если вы используете двунаправленную модель) и вычислить потери с оставшимися 49 парами маркировки. Или, если это имеет смысл для ваших данных (а может и нет), вы можете использовать что-то более продвинутое, например CTC (хотя в Keras его нет, пытаюсь интегрировать реализация TensorFlow без особого успеха), что также реализован в Keras (спасибо @indraforyou)!.
Если порядок на входе не имеет значения, но порядок выходов имеет значение, то у вас может быть RNN, где ваш вход представляет собой исходный 118-длинный вектор плюс пара меток (каждая с горячим кодированием), а выход снова пара меток (опять два слоя softmax). Идея заключалась бы в том, что вы получаете одну «строку» вывода 49x2 в каждом кадре, а затем отправляете ее обратно в сеть вместе с начальным вводом, чтобы получить следующий; во время обучения ввод будет повторяться 49 раз вместе с «предыдущей» меткой (пустая метка для первой).
Если нет последовательных взаимосвязей, которые можно было бы использовать (т. е. порядок ввода и вывода не имеет особого значения), то проблема будет действительно представлена только исходными 122 500 единицами вывода (плюс все скрытые единицы, которые вам могут понадобиться для обработки). получить их правильно). Вы также можете попробовать какую-то золотую середину между обычной сетью и RNN, где у вас есть два вывода softmax и, наряду с вектором длиной 118, вы включаете «id» вывода, который вы хотите (например, как 49 -длинный вектор горячего кодирования); если «значение» каждой метки на каждом из 49 выходов одинаково или сопоставимо, это может сработать.
person
jdehesa
schedule
18.01.2017