Как совместить два слоя в керасе? Один с встраиванием, один с «другой» функцией - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь объединить слой внедрения с числовым слоем объектов. Мне понравилось:

tensor_feature = Input(shape=(MAX_LENGTH, 3))
tensor_embed = Input(shape=(MAX_LENGTH, ))
tensor_embed = Embedding(len(word2index), 128)(tensor_embed)

merged_tensor = concatenate([tensor_embed, tensor_feature]) 
model = Bidirectional(LSTM(256, return_sequences=True))(merged_tensor)
model = Bidirectional(LSTM(128, return_sequences=True))(model)
model = TimeDistributed(Dense(len(tag2index)))(model)
model = Activation('softmax')(model)
model = Model(inputs=[tensor_embed,tensor_feature],outputs=model)

Отмечено, что MAX_LENGTH равно 82.
К сожалению, я получил ошибку, подобную этой:

Ошибка значения: График отключен: невозможно получить значение для тензора Tensor("input_2:0", shape=(?, 82), dtype=float32) на слое "input_2". Следующие предыдущие слои были доступны без проблем: []

при объединении ввода и вывода. Пожалуйста, помогите.

1 Ответ

1 голос
/ 29 мая 2019

Вы перезаписываете tensor_embed, который является входным слоем для встраивания вывода и повторного использования его в качестве ввода в модели.Измените свой код на

tensor_feature = Input(shape=(MAX_LENGTH, 3))
tensor_embed_feature = Input(shape=(MAX_LENGTH, ))
tensor_embed = Embedding(len(word2index), 128)(tensor_embed_feature)

merged_tensor = concatenate([tensor_embed, tensor_feature]) 
model = Bidirectional(LSTM(256, return_sequences=True))(merged_tensor)
model = Bidirectional(LSTM(128, return_sequences=True))(model)
model = TimeDistributed(Dense(len(tag2index)))(model)
model = Activation('softmax')(model)
model = Model(inputs=[tensor_embed_feature,tensor_feature],outputs=model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...