具有更高数字的 Tensorflow 训练机器人抛出 NaN
Tensorflow training bot with higher numbers throws NaN
下面的代码工作得很好,它训练机器将任何给定值乘以 10。
我想弄清楚的是如何用更大的数字训练它而不会在它尝试打印时收到 NaN。例如,我想在训练机器人时输入 100 = 200,但训练输入超过 10 时它会抛出 NaN。
// Create our async function
async function runNN() {
// create model object
const model = tf.sequential();
model.add(tf.layers.dense({
units: 1,
inputShape: [1]
}));
// compile model object
model.compile({
optimizer: 'sgd',
loss: 'meanSquaredError'
});
// training datasets
// input data for training
const xs = tf.tensor([
[1],
[2],
[3],
[4],
]);
// output data for training
const ys = tf.tensor([
[10],
[20],
[30],
[40],
]);
async function firstFunction(_callback) {
// Train model with fit().method
await model.fit(xs, ys, {
epochs: 5000
})
_callback();
}
function secondFunction() {
firstFunction(function() {
// Run inference with predict() method.
model.predict(tf.tensor([
[1],
[2],
[100],
[200],
])).print();
runNN();
});
}
secondFunction()
console.log('')
}
// Call our function
runNN();
如果您知道您的模型应该能够处理的值的范围,您可以将这些值归一化并在归一化值上训练模型。例如,如果您知道最大输入为 1000,那么您可以将模型的所有输入除以 1000,从而只得到 [0, 1] 范围内的输入。然后使用该模型预测输出值并再次按比例放大值。
下面的代码工作得很好,它训练机器将任何给定值乘以 10。
我想弄清楚的是如何用更大的数字训练它而不会在它尝试打印时收到 NaN。例如,我想在训练机器人时输入 100 = 200,但训练输入超过 10 时它会抛出 NaN。
// Create our async function
async function runNN() {
// create model object
const model = tf.sequential();
model.add(tf.layers.dense({
units: 1,
inputShape: [1]
}));
// compile model object
model.compile({
optimizer: 'sgd',
loss: 'meanSquaredError'
});
// training datasets
// input data for training
const xs = tf.tensor([
[1],
[2],
[3],
[4],
]);
// output data for training
const ys = tf.tensor([
[10],
[20],
[30],
[40],
]);
async function firstFunction(_callback) {
// Train model with fit().method
await model.fit(xs, ys, {
epochs: 5000
})
_callback();
}
function secondFunction() {
firstFunction(function() {
// Run inference with predict() method.
model.predict(tf.tensor([
[1],
[2],
[100],
[200],
])).print();
runNN();
});
}
secondFunction()
console.log('')
}
// Call our function
runNN();
如果您知道您的模型应该能够处理的值的范围,您可以将这些值归一化并在归一化值上训练模型。例如,如果您知道最大输入为 1000,那么您可以将模型的所有输入除以 1000,从而只得到 [0, 1] 范围内的输入。然后使用该模型预测输出值并再次按比例放大值。