处理多头 CNN 的标签

handle labels for a multi-headed CNN

我正在尝试构建一个 "multi-headed CNN model",因此每个头都是一个分支,接收单独的多变体时间序列数据。

我不清楚如何处理 "fit" 方法,或者换句话说,如何正确准备 y_train。标签有2个类 0和1

当前架构如下所示。

目标是提前预测一个time_step

输入形状是:

A Training Data (1, 903155, 5)
B Training Data (1, 903116, 5)
C Training Data (1, 902996, 5)

标签形状:

y_train (903155, 1)

做的时候:
history = model.fit(x = [A,B,C], y = y_in)

比我得到的: Input arrays should have the same number of samples as target arrays. Found 1 input samples and 903155 target samples.

将 y_in 重塑为 (1, 903155) 结果:

 expected dense_5 (see image) to have shape (1,) but got array with shape (903155,)

奇怪的是 model.predict([A,B,C]) 产生结果

问题的根源在于批处理维度处理不当;所有图层和数据的第一个维度是批处理维度。错误解释如下。


解决方法:

y_train (903155, 1) 是正确的,但 A, B,C 可能不正确:它们分别指定了尺寸为 (903155, 5), (903116, 5),(902996, 5) 的一个样本。我怀疑这是需要的 - 更可能的是,90... 批次维度 ,应该重塑为:(903155, 1, 5),等等


错误解释:

  • 错误 1 ​​表示您输入了 1 个样本(训练示例),但输入了 903155 个标签
  • 错误 2 表示 dense_5 输出的形状为 (None, 1),但在计算损失
  • 时预计会与 (None, 903155) 进行比较

Input arrays should have the same number of samples as target arrays. Found 1 input samples and 903155 target samples. # Error 1

expected dense_5 to have shape (1,) but got array with shape (903155,) # Error 2

经过一番挖掘,我找到了答案,因为 OverLordGoldDragon 提到输入和输出形状不正确。

1d Conv 期望输入数据始终为: (样本,timesteps_per_sample,features_per_sample)

所以在我的例子中 (1, 903155, 5) --> (903155, 1, 5)