LSTM «многие к одному», многоклассовая классификация

Я пытаюсь обучить LSTM-RNN с 64 скрытыми единицами. Мои данные следующие:

ввод: пустой массив с размерами (170000, 50, 500) -> (примеры, временные шаги, количество функций)
выход: пустой массив с размерами (170000 , 10)

Выход представляет собой категориальную переменную с 10 классами (например, класс 1 соответствует вектору [1,0,0,0,0,0,0,0,0,0])

До сих пор я пробовал этот код, но появляется ошибка о том, что плотный слой должен иметь 3D-ввод.

model = Sequential()
model.add(LSTM(64, input_shape=(50, 500), return_sequences=True,dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(units = 10,activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(input, output, epochs=1, batch_size=64)

Единственное, что, кажется, работает, — это изменение вывода, чтобы он имел следующую форму: (170000,50,10), в которой практически все нули, кроме 50-го временного шага.

Это правильный подход? Если да, то есть ли что-то более эффективное? Меня беспокоит тот факт, что расширение формы выходных данных может сделать код менее эффективным.


person Alejandro    schedule 17.08.2017    source источник


Ответы (1)


Все, что вам нужно сделать, это изменить return_sequences=True на return_sequences=False. Кроме того, если каждый элемент может соответствовать только одному классу, вам нужно изменить функцию активации в выходном слое на activation='softmax'.

person DJK    schedule 18.08.2017