Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将两个不同维度的tensorflow cnn层相乘以引起注意时出错_Python_Tensorflow_Keras_Deep Learning_Cnn - Fatal编程技术网

Python 将两个不同维度的tensorflow cnn层相乘以引起注意时出错

Python 将两个不同维度的tensorflow cnn层相乘以引起注意时出错,python,tensorflow,keras,deep-learning,cnn,Python,Tensorflow,Keras,Deep Learning,Cnn,我想将两层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(laye

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

获取错误,因为两者的维度不同。如何乘法?

为了计算乘法,必须有两个维度相同的张量。以下是一种可能性(遵循您的模型基础结构):


你能将第6层的输出dim改为64而不是256吗?我们无法调整张量输出的大小?你也可以在c3=GlobalAveragePoolig2D()(c3)之后和之前应用稠密(64)(c3)现在我可以将multiplyTypeError:float()参数必须是字符串或数字,而不是“维度”.它可以毫无问题地工作。。。下面是一个运行代码示例:我还有一个相关问题。请看您是否能提供帮助
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])