尝试在Keras中连接两个形状相同的层时出现形状匹配错误

我正在尝试使用Keras函数式API构建一个多输入多输出的模型,并且我在按照他们的代码进行操作时遇到了以下错误:

ValueError: Concatenate层需要除了连接轴之外形状匹配的输入。接收到的输入形状为:[(None, 50), (None, 50, 1)]

我跳过了嵌入层,以下是我的代码:

def build_model(self):    main_input = Input(shape=(self.seq_len, 1), name='main_input')    print(main_input.shape)    # seq_len = 50    # LSTM将向量序列转换为单一向量,    # 包含关于整个序列的信息    lstm_out = LSTM(self.seq_len,input_shape=(self.seq_len,1) )(main_input)    self.auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)    auxiliary_input = Input(shape=(self.seq_len,1), name='aux_input')    print(auxiliary_input.shape)    x = concatenate([lstm_out, auxiliary_input])    # 我们在顶部堆叠了一个深度全连接网络    x = Dense(64, activation='relu')(x)    x = Dense(64, activation='relu')(x)    x = Dense(64, activation='relu')(x)    # 最后我们添加了主要的逻辑回归层    main_output = Dense(1, activation='sigmoid', name='main_output')(x)    self.model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])    print(self.model.summary())    self.model.compile(optimizer='rmsprop', loss='binary_crossentropy',              loss_weights=[1., 0.2])

我在连接步骤中遇到了这个错误,尽管打印的两个层的形状都是(?,50,1)。我不确定为什么会出现这种情况,以及第一个层的input_shape的确切错误是什么,为什么使用print(main_input.shape)时没有得到预期的相同形状,以及如何解决这个问题?

更新:

我通过更改第二输入层的形状找到了解决错误的方法

auxiliary_input = Input(shape=(self.seq_len,), name='aux_input')

这样它们现在可以顺利连接,但对我来说仍然不清楚为什么?


回答:

对于第二个输入,你在错误发生之前指定了,

input_shape = (50,1)# seq_length=50

这意味着最终形状为:

(None,50,1)

现在,当第一个输入通过LSTM时,由于你没有指定return_sequences=True,它将返回形状为(batch_size, units)的张量,即(None, 50),你正在将其与上面提到的(None, 50, 1)进行连接

你的错误消失了,因为你将第二个输入的形状更改为(50,),所以最终形状变为(None,50),这与LSTM的输出匹配,因此它可以顺利连接

Related Posts

如何使用Google Protobuf解析、编辑和生成object_detection/pipeline.config文件

我在一个常见的集成学习范式中训练多个模型,目前我在处理…

我的GridSearchCV不起作用,我不知道为什么

大家好,我在使用GridSearchCV时遇到了问题,…

Keras: 两个同时进行的层,其中一个对前一层的输出进行卷积

我想实现这样的模型连接: 输入图像1 -> 卷积层1 …

如何将行数据转换为列数据而不使用独热编码

我有一个如下所示的数据集。 MonthDate Day…

使用 ML Kit 与 NNAPI

我正在尝试在运行 Android 9 的设备上使用新的…

Vowpal Wabbit 可能的哈希冲突

我在VW中生成了一个模型,并且在相同的数据上生成了两个…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注