目标输出训练集如下: y_train = [0,5,3,1]
一个热编码值如下:
Y_train = [[1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0. 0.]]
此目标集中的类数为4。 单个热编码值的维数为6.
当我在keras sequential dl模型的最终输出密集函数中提到类值的数量时,我得到以下错误消息:
*ValueError: Error when checking target: expected dense_2 to have shape (None, 4) but got array with shape (44833, 6)*
我尝试通过将目标列表值更改为有序列表来解决此问题,如下所示:
old_y_train = [0,5,3,1]
new_y_train = [0,3,2,1]
通过这个修改,dl模型作为一个匹配的数量与一个热编码值的维度一起工作。
这是解决此问题的正确方法吗?另外,你能告诉我如何解决这个问题。
感谢。
答案 0 :(得分:0)
最后一层的单位数应与类的数量相匹配,类的数量应与y_train的一个热编码的长度相匹配。因此,如果您有y_train的以下数据
Y_train = [[1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0. 0.]]
那么模型的最后一层应该是这样的
model.add(Dense(6,activation="softmax"))
我认为这可以解决您的问题。
答案 1 :(得分:0)
我觉得你并不真正理解单热编码。一个热编码将类(2)转换为1和0,这是你得到的标准,但你的单热阵列是错误的。
Y_train = [[1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1.]
[0. 0. 0. 1. 0. 0.]
[0. 1. 0. 0. 0. 0.]]
你写它的方式意味着它有6个类,4个数据点或4个例子。你想要的是: 感觉你并不真正理解一个热门的编码。一个热编码将类(2)转换为1和0,这是你得到的标准,但你的单热阵列是错误的。
Y_train = [[1. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 1. 0. 0.]
[0. 1. 0. 0. ]]
现在你有4个班级,这就是你的错误所抱怨的。