Много-ко-многим классификация с Keras LSTM - PullRequest
0 голосов
/ 31 января 2019

Я новичок в RNN / LSTM в Керасе, и мне нужен совет о том, следует ли / как использовать их для моей проблемы, что является классификацией «многие ко многим».

У меня есть ряд временных рядов: приблизительно1500 «прогонов», каждый из которых длится около 100-300 временных шагов и имеет несколько каналов.Я понимаю, что мне нужно обнулить данные до максимального количества временных шагов, поэтому мои данные выглядят так:

[nb_samples, timesteps, input_dim]: [1500, 300, 10]

Поскольку получить метку за один временной шаг невозможно, не зная прошлогодаже для человека я мог бы разработать технические характеристики и обучить классическому алгоритму классификации, однако, я думаю, что LSTM были бы здесь подходящими. Этот ответ говорит мне, что для классификации многие-ко-многим в Keras мне нужно установить для return_sequence значение True.Тем не менее, я не совсем понимаю, как действовать дальше - использовать ли последовательность возврата в качестве входных данных для другого нормального слоя?Как мне подключить это к моему выходному слою?

Любая помощь, советы или ссылки на учебники очень ценятся - я нашел много материала для классификации многие-к-одному, но ничего хорошего для многих-ко-многим.

1 Ответ

0 голосов
/ 31 января 2019

Может быть много подходов к этому, я указываю, который может хорошо соответствовать вашей проблеме.

Если вы хотите stack два LSTM слоя, тогда return-seq может помочь в изучениидля другого слоя LSTM, как показано в следующем примере.

from keras.layers import Dense, Flatten, LSTM, Activation
from keras.layers import Dropout, RepeatVector, TimeDistributed
from keras import Input, Model

seq_length = 15
input_dims = 10
output_dims = 8 # number of classes
n_hidden = 10
model1_inputs = Input(shape=(seq_length,input_dims,))
model1_outputs = Input(shape=(output_dims,))

net1 = LSTM(n_hidden, return_sequences=True)(model1_inputs)
net1 = LSTM(n_hidden, return_sequences=False)(net1)
net1 = Dense(output_dims, activation='relu')(net1)
model1_outputs = net1

model1 = Model(inputs=model1_inputs, outputs = model1_outputs, name='model1')

## Fit the model
model1.summary()


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)        (None, 15, 10)            0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 15, 10)            840       
_________________________________________________________________
lstm_2 (LSTM)                (None, 10)                840       
_________________________________________________________________
dense_3 (Dense)              (None, 8)                 88        
_________________________________________________________________
Другой вариант заключается в том, что вы можете использовать полную последовательность возврата в качестве объектов для следующего слоя.В этом случае создайте простой слой Dense, вход которого будет [batch, seq_len*lstm_output_dims].

Примечание. Эти функции могут быть полезны для задачи классификации, но в основном мы использовали составной слой lstm и используем его выводwith-out complete sequence как функции для слоя классификации.

Этот ответ может быть полезен для понимания других подходов к архитектуре LSTM для различных целей.

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