numpy数组列表,而不是一个热向量

时间:2019-01-13 15:30:21

标签: python-3.x numpy machine-learning keras

对于神经网络,我需要将标签转换为一个热阵列。 我有3个标签显示在列表中:

labels = ["Synonym", "Antonym", "Not relevant", "Synonym", "Antonym"]

有3种不同的标签,我想先将它们分别引用到数字1,2和3,然后从它们中构建一个热向量,例如标签3-> 0 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],

1 个答案:

答案 0 :(得分:1)

Keras期望使用(batch_size, classes)形状的numpy数组。但是您将输入作为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)

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

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