这是我可以用来测试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();
});
答案 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