gpt4 book ai didi

python - keras 合并连接失败,因为输入形状不同,即使输入形状相同

转载 作者:太空宇宙 更新时间:2023-11-04 09:41:13 25 4
gpt4 key购买 nike

我正在尝试将 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_net 的自定义 keras 层的输入张量形状,如下所示:

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')

所以 print 语句说形状是 (?,6), (?,100) , (?,100) , (?,100) 但 keras merge 函数将其读取为 [(None, 6), (无, 7, 62), (无, 23, 62), (无, 2, 62)] ?为什么会这样?

谢谢!

最佳答案

所以......如果消息说你正在使用这些形状,那么你不能连接......

[(None, 6), (None, 7, 62), (None, 23, 62), (None, 2, 62)] 

您可以尝试连接最后三个:

left_combined = keras.layers.Concatenate(axis=1)([l1_conv_net, l2_conv_net, l3_conv_net])

不要打印张量,打印K.int_shape(tensor) 以查看实际形状。 (顺便说一下,您发布的内容确实出了问题,因为张量的形状太奇怪了。如果您使用的是一维卷积或 RNN,Keras 形状很有意义)

如果您的后端不是 tensorflow,您可能在某处的自定义层或 lambda 层中有错误的 output_shape 参数。

关于python - keras 合并连接失败,因为输入形状不同,即使输入形状相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51611946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com