我正在尝试将4个不同的层连接到一个层中,以便输入到模型的下一部分。我正在使用Keras函数API,代码如下所示。
# Concat left side 4 inputs and right side 4 inputs
print(lc,l1_conv_net,l2_conv_net,l3_conv_net)
left_combined = merge.Concatenate()([lc, l1_conv_net, l2_conv_net, l3_conv_net])
这个错误表明我的输入形状不同。但是,我也打印了输入形状,除了沿着concat轴(这是形状[1],因为形状[0]=?是批处理中的示例数)。
Tensor("input_1:0", shape=(?, 6), dtype=float32) Tensor("add_3/add_1:0", shape=(?, 100), dtype=float32) Tensor("add_6/add_1:0", shape=(?, 100), dtype=float32) Tensor("add_9/add_1:0", shape=(?, 100), dtype=float32)
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 6), (None, 7, 62), (None, 23, 62), (None, 2, 62)]
巧合的是,形状(None,7,62),(None,23,62),(None,2,62)是另一个自定义路缘石层的输入张量形状,该层产生如下所示的l1-conv-u网:
l1_conv_net = build_graph_conv_net_fp_only([l1x, l1y, l1z],
conv_layer_sizes=self.conv_width,
fp_layer_size=self.fp_length,
conv_activation='relu', fp_activation='softmax')
所以打印声明说这个形状是?,6),(?,100),(?,100),(?,100)但是keras merge函数将其读取为[(None,6),(None,7,62),(None,23,62),(None,2,62)]?为什么会这样?
谢谢你!
所以。。。。如果消息说您正在使用这些形状,则无法连接。。。。
您可以尝试连接最后三个:
不要打印张量,打印
K.int_shape(tensor)
以查看实际形状。(顺便说一下,你贴的东西确实出了问题,因为张量的形状太奇怪了。如果使用一维卷积或RNN,则路缘石形状是有意义的)如果后端不是tensorflow,那么在自定义层或lambda层中可能有错误的
output_shape
参数。Keras连接有一些限制。维数必须相同,这就是第一个张量失败的原因。您可以通过将其重新整形为(None,162)来快速保存它。如果要沿第一个轴合并,则计算中所有“无”维度都必须相同。从source code来看,将轴设为None本身并不是问题。
因此,重塑第一个张量,并检查所有轴的“无轴”是否始终相同。
相关问题 更多 >
编程相关推荐