Я на самом деле учусь строить машинное обучение в nodejs: для этого я выбираю tenenflow API.Цель этого машинного обучения состоит в том, чтобы ввести 14 записей и вернуть число относительно 14 записей.(Я не могу описать больше контекста, потому что я нахожусь в стажировке, и я не знаю, позволил ли я говорить об этом.) Но модель всегда предсказывает неправильные значения, и я не знаю почему.Я пробовал другую функцию потерь / оптимизатора, конфигурацию модели разных слоев, активацию разных слоев ... но модель всегда дает мне значение с плавающей запятой.
Я пытался заменить значение ввода / вывода на 0,3, прогнозируемое возвращениемне значение от 0,1 до 0,3.(проверено 3 раза).Но значение потерь уменьшается во время тренировок, которые, кажется, работают лучше.
Я также пытался увеличить период обучения до 1000, безрезультатно: /
Прежде всего, я создаю функцию для построения модельной сети.Моя модель имеет входной слой из 14 единиц, затем 2 скрытых слоя по 5 единиц, а затем выходной слой только с одной единицей.(Все слои в «сигмовидной» активации и имеют плотный тип.)
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?