gpt4 book ai didi

javascript - 输入大小为 1 的训练会导致后续预测出现 NaN

转载 作者:行者123 更新时间:2023-11-28 03:19:13 25 4
gpt4 key购买 nike

我正在关注 MNIST 教程 here用于识别手写字符。

我能够毫无问题地加载和识别手写数字,但现在我想在新图像上再次训练模型(特别是一次一个)。

出于某种原因,当我选择等于 1 的训练大小时,我的所有预测都变为 NaN。

如果我选择一个值 >=2,它就可以正常工作。

训练功能:

async function train(model, data)
{
const TRAIN_DATA_SIZE = 1; // WHEN THIS IS 1, CAUSES PREDICT TO OUTPUT NaN

const [trainXs, trainYs] = tf.tidy(() =>
{
const d = data.nextTrainBatch(TRAIN_DATA_SIZE);
return [
d.xs.reshape([TRAIN_DATA_SIZE, 28, 28, 1]),
d.labels
];
});

console.log(trainXs.dataSync());
console.log(trainYs.dataSync());

return model.fit(trainXs, trainYs);
}

nextTrainBatch 的代码是 here .

预测输出示例:

currentTensor = tf.tensor2d(inputs, [1, PIXELSSQUARED]);

const output = model.predict(currentTensor.reshape([1, 28, 28, 1]));
const prediction_value = Array.from(output.argMax(1).dataSync());
console.log(output.dataSync());

当训练大小为 2 或更大时:

Float32Array(10) [3.308702423154841e-9, 5.89648436744028e-8, 0.00005333929220796563, 0.8063259720802307, 7.401082784824764e-13, 1.1464327087651327e-7, 6.5924318955190575e-12, 0.1936144232749939, 0.000004253268798493082, 0.000001676815713835822]

当训练大小为1时:

Float32Array(10) [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]

最佳答案

模型正在达到数值不稳定。使用 SGD 等优化器可能会有所帮助。然而,使用批量大小 1 实际上并不是一个好主意,因为模型可能会在最佳值附近振荡

I want the user to select the correct value after the model has made it's prediction e.g. Make Prediction, Select Correct Output, Retrain based on this information

如果您想进一步训练,您需要拥有与模型 inputShape 匹配的数据。因此,预测值和用户选择的结果将被收集起来,并可用于进一步训练模型

// the model has been trained
y = model.predict(x) // predict

假设用户将验证结果 y。进一步训练

model.fit(x, y)

循环继续

关于javascript - 输入大小为 1 的训练会导致后续预测出现 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59331219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com