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 () - хороший способ понять график.
Нет. Это невозможно достичь. Если в GAC существует DLL версии, равной той, на которую ссылается ваша программа, CLR всегда выберет эту. Нет способа переопределить это поведение.
JaredPar прав - GAC будет всегда опрашиваться первым для сборки. Однако, если вы похожи на меня и хотите, чтобы DLL работала в GAC и все еще отлаживалась, вы можете добавить скрипт сборки, чтобы выгрузить ваш файл .pdb в ту же папку, что и сборка в GAC (она будет в C: \ windows \ assembly \ gac_msil \ assembly.name_ [токен открытого ключа]).
Я не уверен, что есть что-то, что действительно измените порядок поиска как таковой, но в зависимости от ваших требований вы можете захотеть изучить перенаправление привязки сборки , которое дает вам довольно много контроля над тем, какие версии сборок загружаются.