Python 将两个不同维度的tensorflow cnn层相乘以引起注意时出错
我想将两层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
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])