将2个具有不同尺寸的tensorflow cnn层相乘以引起注意cnn时出错 [英] Error in multiplying 2 tensorflow cnn layers with different dimensions for attention cnn

查看:72
本文介绍了将2个具有不同尺寸的tensorflow cnn层相乘以引起注意cnn时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将2个cnn层的输出相乘(找到点积)。不幸的是,两者都有不同的尺寸。谁能帮忙调整张量的大小?

I wanted to multiply(find dot product) the output from 2 cnn layers. Unfortunately both have different dimensions. Can any one help with resizing of the tensors?

我的基本模型是

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层并尝试乘法

output from layer 2 and layer 6 are taken and tried multiplication

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]) 

由于两者的尺寸不同,因此会出现错误。我将如何相乘?

Getting error since both are of different dimensions. How will I multiply ?

推荐答案

为了计算乘法,您必须具有两个维数相同的张量。这是一种可能(遵循您的model_base结构):

in order to compute multiplication, u have to have two tensors with the same dimensionality. here a possibility (following your model_base structure):

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])

这篇关于将2个具有不同尺寸的tensorflow cnn层相乘以引起注意cnn时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆