TensorFlow 数据集因数据过多而崩溃
TensorFlow dataset collapses with too much data
我正在使用最简单的模型在 Node.js:
中制作这个测试用例
model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
并使用公式 X+X=Y
对其进行训练以进行测试:
let xsData = [];
let ysData = [];
for (let i = 1; i < 17; i++) { // Please note the 16 iterations here!
xsData.push(i);
ysData.push(i+i);
}
const xs = tf.tensor2d(xsData, [xsData.length, 1]);
const ys = tf.tensor2d(ysData, [ysData.length, 1]);
await model.fit(xs, ys, {epochs: 500});
完成后,我正在使用数字 10 测试模型:
model.predict(tf.tensor2d([10], [1, 1])).dataSync();
这给了我 大约 20 的值。这是正确的 (10+10=20).
现在问题:每当我将迭代次数更改为 17+ 时,模型就会崩溃。我测试相同的数字 (10),输出结果为 -1.9837386463351284e+25
等。更高的数据集迭代会导致 Infinity
和 NaN
.
有人知道这里发生了什么吗?如果有人能指出我正确的方向,那就太好了。提前谢谢你。
在回归中使用 SGD 可能会很棘手,因为 输出没有上限 并且可能导致 NaN
值损失,换句话说梯度爆炸等.
将优化器更改为 Adam
或 RMSProp
大多数时候都有效。
我正在使用最简单的模型在 Node.js:
中制作这个测试用例 model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
并使用公式 X+X=Y
对其进行训练以进行测试:
let xsData = [];
let ysData = [];
for (let i = 1; i < 17; i++) { // Please note the 16 iterations here!
xsData.push(i);
ysData.push(i+i);
}
const xs = tf.tensor2d(xsData, [xsData.length, 1]);
const ys = tf.tensor2d(ysData, [ysData.length, 1]);
await model.fit(xs, ys, {epochs: 500});
完成后,我正在使用数字 10 测试模型:
model.predict(tf.tensor2d([10], [1, 1])).dataSync();
这给了我 大约 20 的值。这是正确的 (10+10=20).
现在问题:每当我将迭代次数更改为 17+ 时,模型就会崩溃。我测试相同的数字 (10),输出结果为 -1.9837386463351284e+25
等。更高的数据集迭代会导致 Infinity
和 NaN
.
有人知道这里发生了什么吗?如果有人能指出我正确的方向,那就太好了。提前谢谢你。
在回归中使用 SGD 可能会很棘手,因为 输出没有上限 并且可能导致 NaN
值损失,换句话说梯度爆炸等.
将优化器更改为 Adam
或 RMSProp
大多数时候都有效。