Python 3.x numpy数组列表,而不是一个热向量
对于神经元网络,我需要将标签转换为一个热数组。 我有3个标签出现在列表中,如: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
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:使用序列设置数组元素。