Javascript 二维简单问题中的TensorflowJS

Javascript 二维简单问题中的TensorflowJS,javascript,tensorflow,tensorflow.js,Javascript,Tensorflow,Tensorflow.js,我在玩TensorflowJS,我对我得到的(糟糕的)结果感到惊讶。 以下是我正在解决的问题: 从左上角(0,0)到右下角(1,1)有一个二维正方形。每个角点都有一种RGB颜色,如下所示: 左上角:黑色 右上角:红色 右下角:绿色 左下角:蓝色 我想推断正方形中某点的颜色 我已经建立了一个简单的Tensorflow模型。经过一次简单的训练,我在右下角进行了测试。。。我没有得到接近果岭的东西,反而得到了糟糕的结果。 你能告诉我哪里做错了吗? 谢谢 我的结果: Float32Array(3) [0.

我在玩TensorflowJS,我对我得到的(糟糕的)结果感到惊讶。 以下是我正在解决的问题: 从左上角(0,0)到右下角(1,1)有一个二维正方形。每个角点都有一种RGB颜色,如下所示:

左上角:黑色

右上角:红色

右下角:绿色

左下角:蓝色

我想推断正方形中某点的颜色

我已经建立了一个简单的Tensorflow模型。经过一次简单的训练,我在右下角进行了测试。。。我没有得到接近果岭的东西,反而得到了糟糕的结果。 你能告诉我哪里做错了吗? 谢谢

我的结果:

Float32Array(3) [0.25062745809555054, 0.7481716275215149, 0.2501324415206909]

该模型使用线性激活,仅当特征和标签线性相关(y=ax+b)时才能输出正确的结果。需要使用不同的激活

通常需要对模型进行微调,这意味着需要使用一组不同的参数,直到找到具有最佳精度的模型为止——这称为微调。下面是一个模型,其中包含一组精度较低的参数。需要记住的是,这不是一组参数。它是一组参数。有关如何微调模型的信息,请参见

(异步()=>{
const model=tf.sequential();
add(tf.layers.dense({units:18,inputShape:[2]}));
add(tf.layers.dense({units:14,activation:'relu6'}));
add(tf.layers.dense({units:3,activation:'relu6'}));
常数xs=tf.张量([0,0,1,0,1,1,0,1],[4,2]);
常数ys=tf.张量([
[0,0,0],//黑色
[1,0,0],//红色
[0,1,0],//绿色
[0,0,1],//蓝色
], [4, 3]);
常量优化器=tf.train.sgd(0.000001)
compile({loss:'meanSquaredError',优化器:'adam'});
等待模型拟合(xs,ys{
纪元:500,
回调:{onEpochEnd:(epoch,logs)=>console.log(logs.loss)}
});
常数输入=tf.张量([1,1],[1,2]);
log(model.predict(input.dataSync());
})()

您的学习算法和数据存在一些问题。但我认为最大的一个是你的图层有一个默认的(‘线性’)激活。由于输出值类似于多个类的概率,因此需要使用
操作:“softmax”
。另外,典型的机器学习数据比您在本例中使用的数据更加多样化和多变(噪音更大)。对不起,我是指
激活:
tf.layers.dense()
调用的
softmax'
。我试图将激活设置为softmax。。。但这并没有解决问题。我用彩色画了一个正方形。请参阅下一个链接!。谢谢Edkeveke!损失值很好。。。但是当我尝试下面的方法时,我仍然有不好的结果。。。这太奇怪了!!!`var输入=tf.张量([0,0],[1,2]);log(“左上角”,model.predict(input.dataSync());输入=tf.张量([0,1],[1,2]);log(“右上角”,model.predict(input.dataSync());输入=tf.张量([1,1],[1,2]);log(“右下角”,model.predict(input.dataSync());输入=tf.张量([1,0],[1,2]);log(“左下角”,model.predict(input.dataSync())`每次运行代码时,权重值都会随机初始化。根据这些值,模型预测可能是错误的。但是多次运行代码,您将看到它将预测
[0,0]
的正确值。您可以尝试保存权重值,模型精度是您所期望的。我确认。。。这是太随机依赖。。。有时左上角是好的,有时是假的。但不幸的是,我认为没有办法找到一个全局性的好解决方案。每次训练时保存模型,它们被称为检查点。在训练DL模型时,这是一件常见的事情。第二个模型比第一个模型更稳定。因为正如答案中所解释的,这是解决你正在解决的问题的方法
Float32Array(3) [0.25062745809555054, 0.7481716275215149, 0.2501324415206909]