Использование точечного произведения в керасе - PullRequest
0 голосов
/ 14 апреля 2020

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

Я создаю модель с двумя параллельными 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)

1 Ответ

0 голосов
/ 14 апреля 2020

Итак, по определению, скалярное произведение между двумя векторами a и b является скаляром:

enter image description here

Действительно, это также называется скалярным произведением. Следовательно, нет, вы никак не можете получить вектор длиной 256, используя произведение двух векторов.

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

...