将2个具有不同尺寸的tensorflow cnn层相乘以引起注意cnn时出错

时间:2020-07-22 12:32:34

标签: python tensorflow keras deep-learning cnn

我想将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]) 

由于尺寸不同,因此出错。我将如何相乘?

1 个答案:

答案 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])
相关问题