Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python keras合并连接失败,因为输入形状不同,即使输入形状相同_Python_Keras_Keras Layer - Fatal编程技术网

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

Python keras合并连接失败,因为输入形状不同,即使输入形状相同,python,keras,keras-layer,Python,Keras,Keras Layer,我正在尝试将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]) 出现此错误,表示我的输入形状不同

我正在尝试将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是另一个自定义keras层的输入张量形状,该层生成l1_conv_net,如下所示:

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?,但是keras merge函数将其读取为[None,6,None,7,62,None,23,62,None,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_ShapeSensor以查看实际形状。顺便说一句,你发布的东西确实出了问题,因为张量的形状太奇怪了。如果使用1D卷积或RNN,Keras形状是有意义的


如果您的后端不是tensorflow,您可能在自定义层或lambda层中的某个位置有错误的输出形状参数

所以。。。。如果消息说您正在使用这些形状,则无法连接

[(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_ShapeSensor以查看实际形状。顺便说一句,你发布的东西确实出了问题,因为张量的形状太奇怪了。如果使用1D卷积或RNN,Keras形状是有意义的


如果您的后端不是tensorflow,您可能在自定义层或lambda层中的某个位置有错误的输出形状参数

Keras concatenate有一些限制。维数必须相同,这就是第一张量失败的原因。通过将其重塑为None,1,62,您可以非常快速地保存它。如果要沿第一个轴合并,则所有“无”标注在计算中必须相同。从这个角度来看,似乎拥有一个无轴本身并不是一个问题


因此,重塑第一个张量,检查所有轴的无轴是否始终相同

Keras concatenate有一些限制。维数必须相同,这就是第一张量失败的原因。通过将其重塑为None,1,62,您可以非常快速地保存它。如果要沿第一个轴合并,则所有“无”标注在计算中必须相同。从这个角度来看,似乎拥有一个无轴本身并不是一个问题


因此,重塑第一个张量,检查所有轴的无轴是否始终相同

我不是一个大专家,但是在我的案例中,定义Inputshape=1,1这样的输入,而不是Inputshape=1,添加了所需的维度,合并除外。。。试着添加一个长度为1的维度。

我不是一个大的专家,但是在我的案例中,定义输入时像Inputshape=1,1,而不是这个Inputshape=1,添加了所需的维度,合并除外。。。只需尝试添加长度为1的维度。

您确定它是相同的连接层吗?似乎是另一个不同输入的concat层导致了错误,而不是您输入代码的那一个。这是同一个concat层,因为我在那一行中跟踪了行错误:这很奇怪,尽管在合并层之前的行显示形状都是一样的…甚至打印显示了不同的形状。。。使用printK.int_ShapeSensor打印正确的形状。不要打印张量,keras和tensorflow之间的对话可能有点扭曲。感谢您的帮助,我发现错误是因为自定义层使用Keras1,其中它是get_output_shape,而Keras2必须转换为compute_output_shape。再次感谢你!您确定它是同一个连接层吗?似乎是另一个不同输入的concat层导致了错误,而不是您输入代码的那一个。这是同一个concat层,因为我在那一行中跟踪了行错误:这很奇怪,尽管在合并层之前的行显示形状都是一样的…甚至打印显示了不同的形状。。。使用printK.int_ShapeSensor打印正确的形状。不要打印张量,keras和tensorflow之间的对话可能有点扭曲。感谢您的帮助,我发现错误是因为自定义层使用Keras1,其中它是get_output_shape,而Keras2必须转换为compute_output_shape。再次感谢你!你是对的。custome layer output_shape方法错误。我将类层中的方法从get_output_shape更改为compute_output_shape,所有错误都如预期的那样!太好了:-
如果你认为这回答了你的问题,请把它标记为“回答”。李开卓是对的。custome layer output_shape方法错误。我将类层中的方法从get_output_shape更改为compute_output_shape,所有错误都如预期的那样!伟大:如果你认为这回答了你的问题,请把它标记为“回答”。林开卓