Machine learning 如何使用Tensorflow.JS实现softmax

Machine learning 如何使用Tensorflow.JS实现softmax,machine-learning,deep-learning,neural-network,tensorflow.js,softmax,Machine Learning,Deep Learning,Neural Network,Tensorflow.js,Softmax,使用Tensorflow.JS,我尝试使用softmax激活功能,在最后一个密集层上运行机器学习模型。当我尝试运行它时,我收到: 检查目标时出错:预期密集密度2具有形状[,1],但获得具有形状[3,2]的数组 如果我注释掉fit函数并运行它,我会得到一个1x2数组(正如预期的那样,因为我在最后一层上有2个单元,我只在一个测试中输入 此外,当我将y变量更改为这个数组:[[1,2,3]]时,它会进行训练(但我认为这不正确,因为y不是最后一层(2)的正确形状) 任何建议或帮助,将不胜感激,以填补我的知

使用Tensorflow.JS,我尝试使用softmax激活功能,在最后一个密集层上运行机器学习模型。当我尝试运行它时,我收到:

检查目标时出错:预期密集密度2具有形状[,1],但获得具有形状[3,2]的数组

如果我注释掉fit函数并运行它,我会得到一个1x2数组(正如预期的那样,因为我在最后一层上有2个单元,我只在一个测试中输入

此外,当我将y变量更改为这个数组:[[1,2,3]]时,它会进行训练(但我认为这不正确,因为y不是最后一层(2)的正确形状)

任何建议或帮助,将不胜感激,以填补我的知识空白

var tf = require('@tensorflow/tfjs');

let xs = tf.tensor([
  [1,2],
  [2,1],
  [0,0]
]);

let ys = tf.tensor([
  [1,2],
  [2,1],
  [1,1]
]);

async function createModel () {


  const model = tf.sequential();
  model.add(tf.layers.dense({inputShape: [2], units: 32, activation: "relu"}));
  model.add(tf.layers.dense({units: 2}));
  model.compile({loss: "sparseCategoricalCrossentropy",optimizer:"adam"});

  //await model.fit(xs, ys, {epochs:1000});

  model.predict(tf.tensor([[1,2]])).print();
}

createModel();

下面是最后一层上的softmax激活:

  const model = tf.sequential();
  model.add(tf.layers.dense({inputShape: [2], units: 32, activation: "relu"}));
  model.add(tf.layers.dense({units: 2, activation:'softmax'}));
  model.compile({loss: "sparseCategoricalCrossentropy",optimizer:"adam"});

  model.predict(tf.tensor([[1,2]])).print();
对于错误:

检查目标时出错:预期密集密度2具有形状[,1],但获得具有形状[3,2]的数组

<>你可以考虑给出

的答案。 您的错误与损失函数
sparseCategoricalCrossentropy
有关,该函数期望标签为
tensor1d
。如果您将此损失函数更改为
Category CrossEntropy
,它将起作用。这两种损失的作用相同,标签的编码方式不同。但问题在于标签既不是为
分类交叉熵
编码,也不是为
稀疏分类交叉熵
编码

  • 使用
    sparseCategoricalCrossentropy
    时,标签是一维张量,其中值是类别的索引
  • 当使用分类交叉熵时,标签是二维张量,也就是一个热编码
对于二进制分类(softmax为2个值)应采用更好的二进制交叉熵,并将softmax更改为sigmoid。