Python 3.x numpy数组列表,而不是一个热向量

Python 3.x numpy数组列表,而不是一个热向量,python-3.x,numpy,machine-learning,keras,Python 3.x,Numpy,Machine Learning,Keras,对于神经元网络,我需要将标签转换为一个热数组。 我有3个标签出现在列表中,如: labels = ["Synonym", "Antonym", "Not relevant", "Synonym", "Antonym"] 有3个不同的标签,我想首先将它们引用到数字1、2和3,然后用它们构建一个热向量,比如标签3-->0 1,我有一个生成数组列表的函数,它只用于训练 def label_to_onehot(labels): mapping = {label: i for i, label

对于神经元网络,我需要将标签转换为一个热数组。 我有3个标签出现在列表中,如:

labels = ["Synonym", "Antonym", "Not relevant", "Synonym", "Antonym"]
有3个不同的标签,我想首先将它们引用到数字1、2和3,然后用它们构建一个热向量,比如标签3-->0 1,我有一个生成数组列表的函数,它只用于训练

def label_to_onehot(labels):
    mapping = {label: i for i, label in enumerate(set(labels))}

one_hot = []
for label in labels:
    entry = [0] * len(mapping)
    entry[mapping[label]] = 1
    one_hot.append(entry)
return one_hot
这就是我得到的:

ValueError:检查模型目标时出错:传递给模型的Numpy数组列表不是模型的大小 预期。预期会看到1个数组,但得到以下结果 165757数组列表:[array([[0], [0], [1] ]),数组([[1], [0], [0]]),数组([[0], [1] ,


Keras期望一个numpy数组的shape
(batch\u size,classes)
。但是您将输入作为python列表,它没有
shape
属性来检索批大小和类。因此,尽管大小正确,但类型错误

一种可能的解决办法是: 其中a是映射索引,c是类的总数

def one(a, c):
     out = []
     for i in a:
             entry = [0 for i in range(c)]
             entry[i] = 1
             out.append(entry)
     return np.array(out)

或者,您也可以使用
keras.utils

from keras.utils import to_categorical
a = to_categorical(a, c)

尝试返回
np.array(one_hot)
。您没有提到您使用的是哪种型号,但它可能需要一个数组而不是数组列表。这是您在运行what时得到的结果??以下是我尝试np.array(one_hot)时得到的代码:Epoch 1/7 2019-01-13 17:25:18.816043:i tensorflow/core/platform/cpu\u feature\u guard.cc:141]您的CPU支持未编译此TensorFlow二进制文件以使用的指令:AVX2 FMA回溯(最近的上次调用):…ValueError:使用序列设置数组元素。