«ValueError: форма ввода для« Flatten »не полностью определена» с переменной длиной LSTM - PullRequest
0 голосов
/ 28 октября 2018

Вот мой код:

    from keras.layers import LSTM, Bidirectional, Dense, Input, Flatten
    from keras.models import Model

    input = Input(shape=(None, 100))
    lstm_out = Bidirectional(LSTM(10, return_sequences=True))(input)
    something = Flatten()(lstm_out)
    output = Dense(22, activation='softmax')(something)

    model = Model(inputs=input, outputs=output)
    model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])

Я строю LSTM с переменным вводом через этот вопрос стекопотока .Но теперь моя модель говорит ValueError: The shape of the input to "Flatten" is not fully defined (got (None, 20).Как я могу это исправить?

Заранее спасибо

1 Ответ

0 голосов
/ 28 октября 2018

Вы не можете исправить эту конкретную проблему, потому что вы можете передать вектор переменного размера в слой Dense. Почему? Поскольку он имеет матрицу весов фиксированного размера, то есть ядро ​​W.

Вместо этого вы должны взглянуть на слои, которые могут обрабатывать последовательности переменной длины, такие как RNN. Например, вы можете позволить LSTM изучить представление всей последовательности:

input = Input(shape=(None, 100))
lstm_out = Bidirectional(LSTM(10))(input) # the LSTM produces a single fixed size vector
output = Dense(22, activation='softmax')(lstm_out) # Dense classifies it

Если вам нужна большая емкость в вашей модели, вы можете связать слои RNN, если последний не возвращает последовательности:

lstm_out = Bidirectional(LSTM(10, return_sequences=True))(input)
lstm_out = Bidirectional(LSTM(10))(lstm_out) # this LSTM produces a single vector
...