【问题标题】:Training with an input size of 1 causes NaN in subsequent predictions输入大小为 1 的训练会导致后续预测中出现 NaN
【发布时间】:2020-04-07 10:00:25
【问题描述】:

我正在关注 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 的批量大小实际上不是一个好主意,因为模型可能会在最佳值附近波动
  • 在我的模型经过训练后,有没有更好的方法将用户/进一步的反馈整合到我的模型中?
  • “合并用户”是什么意思?
  • 我的意思是 - 我希望用户在模型做出预测后选择正确的值,例如进行预测,选择正确的输出,根据这些信息重新训练
  • 如果你想进一步训练,你需要有与模型 inputShape 匹配的数据。因此,预测的值和用户选择的结果将被收集起来,可用于进一步训练模型。

标签: javascript tensorflow keras mnist tensorflow.js


【解决方案1】:

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

我希望用户在模型做出预测后选择正确的值,例如进行预测,选择正确的输出,根据这些信息重新训练

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

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

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

model.fit(x, y)

循环继续

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2017-10-25
    • 2022-01-21
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多