Tensorflow keras中一个热编码训练数据的稠密函数输入形状失配

Tensorflow keras中一个热编码训练数据的稠密函数输入形状失配,tensorflow,keras,one-hot-encoding,Tensorflow,Keras,One Hot Encoding,目标输出训练集如下所示: y_列=[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顺序dl模型的最终输出密集函数中的类值数量时,我得到以下错误消息: *ValueError:检查目标时出错:预期密集_2具有形状(无,4),但获得具有形状的数组(44833,6)* 我

目标输出训练集如下所示: y_列=[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顺序dl模型的最终输出密集函数中的类值数量时,我得到以下错误消息:

*ValueError:检查目标时出错:预期密集_2具有形状(无,4),但获得具有形状的数组(44833,6)*
我试图通过将目标列表值更改为有序列表来解决此问题,如下所示:

旧火车=[0,5,3,1]

新列车=[0,3,2,1]

通过这一修改,dl模型的工作方式是,类的数量与一个热编码值的维度相匹配

这是解决这个问题的正确方法吗?另外,你能告诉我如何解决这个问题吗


谢谢。

最后一层的单元数应与等级数匹配,等级数应与y\U序列的一个热编码长度匹配。因此,如果您有y_列车的以下数据

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"))

我想这会解决你的问题。

我感觉你不太懂一个热编码。一个热编码将一个类(2)转换为1s和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.]]
Y_train = [[1. 0. 0. 0.]

           [0. 0. 0. 1.]

           [0. 1. 0. 0.]

           [0. 1. 0. 0. ]]
您编写它的方式意味着它有6个类、4个数据点或4个示例。你想要的是: 我觉得你不太懂一个热编码。一个热编码将一个类(2)转换为1s和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.]]
Y_train = [[1. 0. 0. 0.]

           [0. 0. 0. 1.]

           [0. 1. 0. 0.]

           [0. 1. 0. 0. ]]

现在您有4个类,这就是您的错误所抱怨的。

您可以发布模型的最后一层吗?仍在寻找答案吗?我的类目标数是4。在输出层保持6是正确的方法吗?如果您的类目标编号为4,则将最后一个模型更改为稠密(4,activation=“softmax”),并更改执行一个热编码的方法。