gpt4 book ai didi

node.js - Tensorflow模型总是预测相同的错误值

转载 作者:行者123 更新时间:2023-11-30 08:57:05 24 4
gpt4 key购买 nike

我实际上正在学习在nodejs中构建机器学习:我选择tensorflow用于此的 API。该机器学习的目标是提供 14 个条目的输入并返回与 14 个条目相关的数字。 (我无法描述更多背景,因为我正在实习,我不知道我是否允许谈论这个。)但模型总是预测错误的值,我不知道为什么。我尝试了不同的损失/优化器函数、不同的层模型配置、不同的层激活......但模型总是给我一个浮点值。

我尝试将输入/输出值替换为 0.3,预测返回的值在 0.1 到 0.3 之间。 (测试3次)。但是训练过程中损失值下降了,这似乎效果更好。

我也尝试将训练时期增加到 1000,但没有结果:/

首先,我创建一个函数来构建模型网络。我的模型有一个 14 个单元的输入层,然后是 2 个 5 个单元的隐藏层,然后是只有 1 个单元的输出层。 (所有层都处于“sigmoid”激活状态,并且是密集类型。)

const get_model = async () => {
const model = tf.sequential();

const input_layer = tf.layers.dense({
units: 13,
inputShape: [14],
activation: 'sigmoid',
});
model.add(input_layer)

let left = 3;
while(left >= 2){

const step_layer = tf.layers.dense({
units: 5,
activation: 'sigmoid',
});
model.add(step_layer)

left --;
}

const output = tf.layers.dense({
units: 1,
activation: 'sigmoid',
});

model.add(output)

model.compile({
optimizer: tf.train.sgd(0.01),
loss: tf.losses.absoluteDifference,
metrics: 'accuracy',
})

return model;
}

为了测试模型,在训练过程中,我总是给出一个包含 13 个数字的列表(所有值都是 100),并且我总是给出以下值:100。

const get_output = () => {
return 100;
}
const get_input = () => {
return [
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
];
}

我有两个函数将值转换为张量值。

const get_input_tensor = (value) => {
return tf.tensor([value],[1,14])
}
const get_output_tensor = (value) => {
return tf.tensor(
[Math.floor(value)],
[1,1]
)
}

然后我得到模型,训练模型并尝试预测。

(async () => {
const model = await get_model();

let left = 20;
while(left >= 0){
const input = get_input();
const output = get_output();

await model.fit(get_input_tensor(input),get_output_tensor(output),{
batchSize: 30,
epochs: 10,
shuffle: true,
});

left--;
}

const input = get_input();

const output = model.predict(get_input_tensor(input));

output.print();
})();

在训练过程中,损失值接近 100。这突出表明模型总是返回接近 1 的值。

这是我训练期间的控制台:

Epoch 8 / 10
eta=0.0 ====================================================================>
11ms 10943us/step - loss=99.14
Epoch 9 / 10
eta=0.0 ====================================================================>
10ms 10351us/step - loss=99.14
Epoch 10 / 10
eta=0.0 ====================================================================>
12ms 12482us/step - loss=99.14

然后,当我尝试预测时,模型返回一个接近 1 的值。

这是预测的打印张量。

Tensor
[[0.8586583],]

你可以帮我吗?我不知道出了什么问题。预测是否有可能超过 1?

最佳答案

这是一个简单的模型,它将根据 14 个值的输入预测 100。通常将输入值采样为 0 到 1 之间。它提高了最速下降算法的收敛性。

至于模型预测错误值的原因;有一般答案here

(async () => {
const model = tf.sequential({
layers: [tf.layers.dense({units: 1, inputShape: [14], activation: 'relu', kernelInitializer: 'ones'})]
});
model.compile({optimizer: 'sgd', loss: 'meanSquaredError'});
await model.fit(tf.ones([1, 14]), tf.tensor([100], [1, 1]), {epochs: 100})
model.predict(tf.ones([1, 14])).print();
})()
<html>
<head>
<!-- Load TensorFlow.js -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest"> </script>
</head>

<body>
</body>
</html>

关于node.js - Tensorflow模型总是预测相同的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56164693/

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