В чем разница между этими двумя способами построения модели в керасе? - PullRequest
0 голосов
/ 23 марта 2019

Я новичок в Keras и, пройдя несколько уроков, я начал строить модель и нашел эти два стиля реализации. Однако я получаю сообщение об ошибке в первом и втором работает нормально. Может кто-нибудь объяснить разницу между ними?

Первый метод:


visible = Embedding(QsVocabSize, 1024, input_length=max_length_inp, mask_zero=True)
encoder = LSTM(100,activation='relu')(visible)

Второй метод:


model = Sequential()
model.add(Embedding(QsVocabSize, 1024, input_length=max_length_inp, mask_zero=True))
model.add(LSTM(100,activation ='relu'))

Это ошибка, которую я получаю:

ValueError: Layer lstm_59 was called with an input that isn't a symbolic tensor. Received type: <class 'keras.layers.embeddings.Embedding'>. Full input: [<keras.layers.embeddings.Embedding object at 0x00000207BC7DBCC0>]. All inputs to the layer should be tensors.

1 Ответ

0 голосов
/ 23 марта 2019

Это два способа создания моделей DL в Керасе. Первый фрагмент кода следует функциональному стилю. Этот стиль используется для создания сложных моделей, таких как мульти-ввод / вывод, общие слои и т. Д.

https://keras.io/getting-started/functional-api-guide/

Второй фрагмент кода - последовательный стиль. Можно создавать простые модели, которые включают в себя только укладку слоев.

https://keras.io/getting-started/sequential-model-guide/

Если вы прочитаете руководство по функциональному API, вы заметите следующее:

'Экземпляр слоя вызывается (на тензоре) и возвращает тензор'

Теперь ошибка, которую вы видите, будет иметь смысл. Эта строка только создает слой и не вызывает его, передавая тензор.

visible = Embedding(QsVocabSize, 1024, input_length=max_length_inp, mask_zero=True)

Впоследствии передача этого объекта Embedded в слой LSTM приводит к ошибке, так как он ожидает Tensor.

Это пример из функционального руководства по API. Обратите внимание, что выходные тензоры переходят из одного слоя в другой.

main_input = Input(shape=(100,), dtype='int32', name='main_input')
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)
lstm_out = LSTM(32)(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...