【问题标题】:list of numpy arrays instead of one hot vectornumpy 数组列表而不是一个热向量
【发布时间】:2019-01-13 15:30:21
【问题描述】:

对于神经网络,我需要将标签转换为一个热数组。 我有 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],

【问题讨论】:

  • 尝试返回np.array(one_hot)。您没有提及您使用的是哪个模型,但它可能需要一个数组而不是数组列表。
  • 这是你运行什么时得到的??
  • 这里是代码jdoodle.com/…
  • 当我尝试 np.array(one_hot) 我得到: Epoch 1/7 2019-01-13 17:25:18.816043: I tensorflow/core/platform/cpu_feature_guard.cc:141] 你的 CPU支持未编译此 TensorFlow 二进制文件以使用的指令:AVX2 FMA Traceback(最近一次调用最后一次):.....ValueError: setting an array element with a sequence.

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


【解决方案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)

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

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

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 2017-04-16
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多