我经历了一些与点积相关的堆栈溢出答案,但找不到我的问题的答案。
我正在创建一个具有两个并行CNN的模型,它们得到不同的输入。我正在使用带有1个卷积层的简单CNN。特征提取后,我正在使用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)
因此,根据定义,两个向量a和b之间的点积是标量:
实际上也称为标量积。因此,没有,您不可能使用两个向量的点积获得长度为256的向量。
[如果您要合并拉动层的两个结果向量,可以应用逐元素乘积(请参见multiplication),也可以取它们的平均值。