我想将2个cnn层的输出相乘(找到点积)。不幸的是,两者都有不同的尺寸。任何人都可以帮助调整张量的大小吗?
我的基本模型是
model_base = Sequential()
# Conv Layer 1
model_base.add(layers.SeparableConv2D(32, (9, 9), activation='relu', input_shape=input_shape))
model_base.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 2
model_base.add(layers.SeparableConv2D(64, (9, 9), activation='relu'))
model_base.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
# Conv Layer 3
model_base.add(layers.SeparableConv2D(128, (9, 9), activation='relu'))
model_base.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Dropout(0.25))
model_base.add(layers.Conv2D(256, (9, 9), activation='relu'))
# model.add(layers.MaxPooling2D(2, 2))
# Flatten the data for upcoming dense layer
#model_base.add(layers.Flatten())
#model_base.add(layers.Dropout(0.5))
#model_base.add(layers.Dense(512, activation='relu'))
print(model_base.summary())
从第2层和第6层输出并尝试乘法
c1 = model_base.layers[2].output
c1 = GlobalAveragePooling2D()(c1)
p=np.shape(c1)
c3 = model_base.layers[6].output
c3 = GlobalAveragePooling2D()(c3)
x = keras.layers.multiply([c1, c3])
由于尺寸不同,因此出错。我将如何相乘?
答案 0 :(得分:1)
为了计算乘法,u必须具有两个维数相同的张量。这是一种可能性(遵循您的model_base结构):
c1 = model_base.layers[2].output
c1 = GlobalAveragePooling2D()(c1)
c3 = model_base.layers[6].output
c3 = GlobalAveragePooling2D()(c3)
c3 = Dense(c1.shape[-1])(c3)
x = Multiply()([c1, c3])