javascript - ML5 : Error: You are passing a target array of shape 11342, 1,同时使用损失 'categorical_crossentropy' 。 'categorical_crossentropy' 预期目标

标签 javascript tensorflow

我正在尝试使用 ML5 库在我正在构建的 React 应用程序中进行分类。

我的浏览器出现以下错误 错误:您在使用损失“categorical_crossentropy”时传递形状为 11342,1 的目标数组。 “categorical_crossentropy”期望目标是形状为 [样本、类] 的二元矩阵(1 和 0)。

在引发此错误的几个 Github 问题中,解释是该错误表明您的数据集中只有 1 种类型的对象。您的数据集中必须有 2 个或更多不同的对象类。 这是链接 here 中的说明。和 here .

我不知道这意味着什么。我的数据中有 6 个输入和 2 个输出。我的输入看起来像这样

let inputs = {
  male: 1,
  female: 0,
  dob: 641710800000,
  // have more, but keeping it simple for this example...
}

我的输出看起来像这样

let output = {
  job: 1 // or 0, if they have a job or not, for example. i.e., two possible outputs
}

但是,我仍然收到错误。有人可以帮助我理解为什么以及如何解决它吗?

下面是我的代码:

people_arr = json.voters_arr;
keys = ["male", "female", "dob"];

let model_options = {
  inputs: keys,
  outputs: ["job"],
  task: "classification"
};

let model = ml5.neuralNetwork(model_options);


for (let person of people_arr) {
  let inputs = {
    male: person.male,
    female: person.female,
    dob: person.dob
  };

  let output = {};
  output.job = person.job; // either 0 or 1
  model.addData(inputs, output);
}

model.normalizeData();

let train_options = { epochs: 100 }
model.train(train_options, whileTraining); // <-- error happening here
.then(() => {
  console.log("pre classify");
  return model.classify(new_person_arr);
})
.then((err, results) => {
  if (err) { console.log("error") }

  else {
    let new_arr = results.splice(100);
    console.log("results : ", new_arr);
    setValues({...values, results: new_arr })
  }
})
.catch((err) => { console.log("err : ", err) });

最佳答案

Categorical cross-entropy期望一个 one-hot 向量作为标签,而不是单个数字。例如,假设有三个人:Michael , Jim ,和DwightMichaelJim有工作,Dwight没有。假设没有工作将您归为 0 类别,并且拥有一个将使您进入类别 1 。在这种情况下,标签将如下所示:

[[0,1],    # Michael's label
 [0,1],    # Jim's label
 [1,0]]    # Dwight's label

MichaelJim属于类别1 ,所以他们有 1在索引1和一个 0在所有其他指数中。 Dwight属于类别 0 ,所以他有 1在索引0和一个 0所有其他指数。

如果您想使用单个数字作为标签(即 01 ),则应使用 sparse categorical cross-entropy反而。 Sparse categorical cross-entropy采用一个整数作为每个样本的标签,并假设有 0 中的类别到它看到的最高值整数。因此它可以与您已有的完美配合。

关于javascript - ML5 : Error: You are passing a target array of shape 11342, 1,同时使用损失 'categorical_crossentropy' 。 'categorical_crossentropy' 预期目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60198845/

相关文章:

python - tensorflow 推理时的批量归一化

javascript - 动态禁用选择字段条件是如果我们更改另一个选择字段

tensorflow - Eager-Mode 非常慢(比 Graph-Mode 慢 22 倍)

javascript - 如何获取文本框中的<td>值

javascript - 自动完成的递归标签搜索 - jQuery 插件

tensorflow - 在 tensorflow 中复制网络

python - 如何根据某些输入数据选择张量中的元素?

python - TensorFlow 对象检测 API 评估训练性能

javascript - 如何在 PHP 中使用 JavaScript(AJAX) 变量

javascript - 使文本框的*只有一部分*不可编辑