如何在keras中将Conv1D的输出与Conv2D的输出结合起来
How to combine output of Conv1D with output of Conv2D in keras
我想通过以下方式将标量值添加到 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
输出的形状为 (None, 28, 28, 16)
,target_conv
的形状为 (None, 1, 16)
,其中 28 x 28 对应于图像尺寸,16 是数量的过滤器。对于每个过滤器(16 个维度中的每一个),我想添加相应的 target_conv 值作为标量。所以想象一下,我们只是在查看 input_conv
和 target_conv
的第一个过滤器的输出,它给我们形状 (None, 28, 28, 1) 和 (None , 1, 1).我想将 target_conv
的输出添加到 input_conv
的输出中,它仍然会为第一个过滤器输出 (None, 28, 28, 1),然后每个过滤器都会发生这种情况过滤输出维度 (None, 28, 28, 16).
但是,我不确定如何实现它?
您需要做的就是简单地向 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()
我想通过以下方式将标量值添加到 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
输出的形状为 (None, 28, 28, 16)
,target_conv
的形状为 (None, 1, 16)
,其中 28 x 28 对应于图像尺寸,16 是数量的过滤器。对于每个过滤器(16 个维度中的每一个),我想添加相应的 target_conv 值作为标量。所以想象一下,我们只是在查看 input_conv
和 target_conv
的第一个过滤器的输出,它给我们形状 (None, 28, 28, 1) 和 (None , 1, 1).我想将 target_conv
的输出添加到 input_conv
的输出中,它仍然会为第一个过滤器输出 (None, 28, 28, 1),然后每个过滤器都会发生这种情况过滤输出维度 (None, 28, 28, 16).
但是,我不确定如何实现它?
您需要做的就是简单地向 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()