Может кто-нибудь помочь мне с слоем Keras Merge

К сожалению, значение таких вещей, как (и \ (меняются между регулярными выражениями стиля Emacs и большинством других стилей). Поэтому, если вы попытаетесь избежать этого, вы можете делать противоположное тому, что вы хотите.

Итак, вам действительно нужно знать, какой стиль вы пытаетесь процитировать.

-1
задан vncntdzn 28 February 2019 в 08:03
поделиться

1 ответ

Merge(mode='concat') сейчас Concatenate(axis=1).

Следующее генерирует график правильно на colab.

from tensorflow.python import keras
from keras.layers import *
from keras.models import Model, Sequential

IMG_FEATURES_SIZE = 10
MAX_SENTENCE = 80
VOCABULARY_SIZE = 1000
EMB_SIZE = 100

embedding_matrix = np.zeros((VOCABULARY_SIZE, EMB_SIZE))

LSTM_CELLS_CAPTION = 256
LSTM_CELLS_MERGED = 1000

image_pre = Sequential()
image_pre.add(Dense(100, input_shape=(IMG_FEATURES_SIZE,), activation='relu', name='fc_image'))
image_pre.add(RepeatVector(MAX_SENTENCE,name='repeat_image'))

caption_model = Sequential()
caption_model.add(Embedding(VOCABULARY_SIZE, EMB_SIZE,
                            weights=[embedding_matrix],
                            input_length=MAX_SENTENCE,
                            trainable=False, name="embedding"))
caption_model.add(LSTM(EMB_SIZE, return_sequences=True, name="lstm_caption"))
caption_model.add(TimeDistributed(Dense(100, name="td_caption")))

merge = Concatenate(axis=1,name="merge_models")([image_pre.output, caption_model.output])
lstm = Bidirectional(LSTM(256,return_sequences=False, name="lstm_merged"),name="bidirectional_lstm")(merge)
output = Dense(VOCABULARY_SIZE, name="fc_merged", activation='softmax')(lstm)

predictive = Model([image_pre.input, caption_model.input], output)
predictive.compile('sgd', 'binary_crossentropy')
predictive.summary()

Описание:

Это модель с 2 входами на выборку: изображение и подпись (последовательность слов). Входные графики объединяются в точке конкатенации (name = 'merge_models')

Изображение обрабатывается просто плотным слоем (возможно, вы захотите добавить свертки к ветви изображения); выходные данные этого плотного слоя затем копируются MAX_SENTENCE раз при подготовке к слиянию.

Подписи обрабатываются LSTM и Плотным слоем.

Объединение приводит к временным шагам MAX_SENTENCE, каждый с особенностями из обеих ветвей.

Затем объединенная ветвь в конечном итоге предсказывает один класс из VOCABULARY_SIZE.

model.summary () - хороший способ понять график.

0
ответ дан Pedro Marques 28 February 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: