Tensorflow给出错误的结果

时间:2018-09-10 19:41:06

标签: javascript tensorflow tensorflow.js

这是我可以用来测试tf的准确性的最简单的问题。但是,这不能给我令人满意的结果。我有自己的模型,对于这样的问题,他们甚至都不需要培训,因为错误已经为零。我的理解/代码有问题吗?它应该给出确切的答案,即.11, .06(我的.net模型可以做到)

const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [2]}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
const xs = tf.tensor2d([.01, .02, .03, .04, .05, .06], [3, 2]);
const ys = tf.tensor2d([.03, .07, .11], [3, 1]);
model.fit(xs, ys).then(() => {
model.predict(tf.tensor2d([.05,.06,.02,.03], [2, 2])).print();
});

1 个答案:

答案 0 :(得分:0)

对于您的模型,只有一个时期需要训练。结果,该模型没有像您建议的那样给出错误的结果。我宁愿说它给出了随机结果。 发生了以下情况:在第一个时期,图层的权重将随机初始化。只需更改时期数即可获得更好的结果。

还可以在设置initializer时通过调用kernelInitializer的值来调用dense layer来自定义权重。

这是一个经过10个时期训练的模型,其效果要比仅一个时期的模型要好

const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [2]}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
const xs = tf.tensor2d([.01, .02, .03, .04, .05, .06], [3, 2]);
const ys = tf.tensor2d([.03, .07, .11], [3, 1]);
model.fit(xs, ys, {epochs: 100}).then(() => {
model.predict(tf.tensor2d([.05,.06,.02,.03], [2, 2])).print();
});
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.0"> </script>
  </head>

  <body>
  </body>
</html>

可以找到类似的答案here