Я прошел через несколько ответов о переполнении стека, связанных с точечным продуктом, но не смог найти ответ на свой вопрос.
Я создаю модель с двумя параллельными CNN, которые получают разные входные данные. Я использую простой CNN с 1 слоем свертки. Я использую слой GolabalMaxPooling1D
после извлечения объектов. На каждой стороне выходные данные имеют форму (None, 256)
.
Результат, полученный из двух объединяющих слоев, объединяется с использованием точки. Когда я реализую точку, она дает вывод (None, 1)
.
. Я использовал точку, так что объекты, имеющие максимальное значение, улучшаются, а объекты с минимальными значениями уменьшаются при объединении объектов из двух моделей.
Есть ли способ, которым я могу использовать точку для модели и получить выходную форму как (None, 256)
?
Ниже описано, как я строю свою модель
# input 1
input1= layers.Input(shape=(600,), dtype='int32', name='model1')
embeded_sequence1 = layers.Embedding(10000, 32) (input1)
conv_layer1 = layers.Conv1D(NO_OF_CONV_FILTERS,NO_OF_CONV_SIZE)(embeded_sequence1 )
activ_layer1 = layers.Activation('relu')(conv_layer1 )
global_max_pool1 = layers.GlobalMaxPooling1D()(activ_layer1 )
# input 2
input2 = layers.Input(shape=(600,), dtype='int32', name='model2')
embeded_sequence2 = layers.Embedding(10000, 32)(input2 )
conv_layer2 = layers.Conv1D(NO_OF_CONV_FILTERS,NO_OF_CONV_SIZE)(embeded_sequence2 )
activ_layer2 = layers.Activation('relu')(conv_layer2 )
global_max_pool2 = layers.GlobalMaxPooling1D()(activ_layer2 )
# perform fuse classification
dot_product = dot(inputs=[global_max_pool1, global_max_pool2], axes=1, normalize=False)
fc_layer_fuse = layers.Dense(256)(dot_product)