检查模型目标时出错:期望dense_24具有形状...但是在Keras中得到了具有形状的数组...

问题描述 投票:8回答:2

我无法理解这条错误消息试图告诉我的内容。

看一下我模型的总结,我看的是最后几层。

enter image description here

但是当我适应我的模型时,我得到了这个:

enter image description here

我不明白。如果我仔细阅读,Keras似乎在说,“我查看了验证集的标签(目标),明智地,这让我觉得模型中的最后一层应该被塑造(None,2)。但是,而不是在模型中实际获得最后一层形状(无,2),该层由一个实际数组组成。这是另一种形状。“

这毫无意义。

我认为我怀疑这个错误确实应该说,一般来说:

"ValueError: Error when checking model target: although dense_n has shape (x, y), the shape of the target, (a,b), in incompatible."

有人关心同意还是不同意?谢谢。

(有一个类似的问题here,但不是很有帮助。)

arrays keras
2个回答
3
投票

我不确定你期望的答案是否是这个,但......

第一:我同意 - 错误信息似乎很奇怪,它应该谈论dense_24和目标数组之间的不兼容性。

现在,要解决您的问题,您应该重塑目标数组或在末尾创建不同的Dense以匹配您的数组。

关于目标数组,对于两个类的分类,它应该形如:

  • (46000,2)如果您的分类使用两个值,一个用于A类的可能性,另一个用于B类的可能性
  • (46000,1)如果您的分类使用单个值为0 A类和1 B类(在这种情况下,您的密集层应为(None,1))

我认为最简单的解决方案是:

  • 不要在模型的末尾使用Dense(2,...),而是使用Dense(1, activation='sigmoid')

为什么?因为您的目标数据形状像(46000,1),这意味着您只有一个数字用于两个类。 0是一类,1是另一类。


2
投票

Keras说您构建的网络输出长度为2的数组,但您的训练数据包含形状为(0,1)的数据。但是,训练数据形状应与网络输出形状匹配。

形状(None,2)仅表示网络接受具有任意数量元素的批次,这些元素本身是两个元素的数组(第一个元素是Keras形状的批量大小)。所以正确的输入数据形状将是(2,)。

从错误消息中我们看到您有4600个具有形状(0,1)的训练数据。这就是冲突的原因。我怀疑读取训练数据会出现问题,而你实际上并不适合你想要的两个元素的数组。

© www.soinside.com 2019 - 2024. All rights reserved.