【发布时间】:2019-05-16 21:26:21
【问题描述】:
我实际上正在学习在 nodejs 中构建机器学习:我为此选择了tensorflow API。 这种机器学习的目标是输入 14 个条目并返回一个与 14 个条目相关的数字。 (我无法描述更多的背景,因为我正在实习,我不知道我是否允许谈论这个。) 但是模型总是预测错误的值,我不知道为什么。我尝试了不同的损失/优化器功能,不同的层模型配置,不同的层激活......但模型总是给我一个浮点值。
我尝试将输入/输出值替换为 0.3,预测返回一个介于 0.1 和 0.3 之间的值。 (测试 3 次)。但是在训练期间损失值下降,这似乎效果更好。
我还尝试将训练 epoch 增加到 1000,没有结果:/
首先,我创建一个函数来构建模型网络。我的模型有一个 14 个单元的输入层,然后是 2 个 5 个单元的隐藏层,然后是只有一个单元的输出层。 (所有层都处于'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 ?
【问题讨论】:
标签: node.js tensorflow machine-learning tensorflow.js