首页 > 解决方案 > 如何在keras中将Conv1D的输出与Conv2D的输出结合起来

问题描述

我想通过以下方式将标量值添加到 Conv2D 操作的输出中:

num_filters = 16
num_targets = 10
input_conv = layers.Conv2D(num_filters, (3, 3), activation='relu', padding='same')(input_img)
target_conv = layers.Conv1D(num_filters, num_targets, use_bias=False, activation='linear')(label)
# TODO: add output target_conv to input_conv along each of the filter dimensions
# this is like adding a scalar value for each of the filter dimensions

input_conv输出是 shape(None, 28, 28, 16)target_conv是 shape ,其中(None, 1, 16)28 x 28 对应于图像尺寸,16 是过滤器的数量。对于每个过滤器(16 个维度中的每一个),我想将相应的 target_conv 值添加为标量。所以想象一下,我们只是查看第一个过滤器的输出input_convtarget_conv,它给了我们形状 (None, 28, 28, 1) 和 (None, 1, 1)。我想将输出添加target_convinput_conv第一个过滤器仍将输出 (None, 28, 28, 1) 的输出,然后每个过滤器维度都会发生这种情况以输出 (None, 28, 28, 16)。

但是,我不确定如何实现这一点?

标签: pythontensorflowkerasconv-neural-networktensor

解决方案


您需要做的只是将一维添加到 target_conv 输出,以便将其变为 4D。这使您可以在两个输出之间进行简单的求和

num_filters = 16

input_img = Input((28,28,1))
label = Input((10,1))
input_conv = Conv2D(num_filters, (3, 3), 
                    activation='relu', padding='same')(input_img) # (None,28,28,num_filters)
target_conv = Conv1D(num_filters, 10, 
                     use_bias=False, activation='linear')(label) # (None,1,num_filters)

target_conv = Reshape((1,1,num_filters))(target_conv) # (None,1,1,num_filters)
sum_filter = Add()([input_conv,target_conv]) # (None,28,28,num_filters)

m = Model([input_img,label], sum_filter)
m.summary()

推荐阅读