Прогнозируемые данные, не совпадающие с фактическими данными после модели обучения

#machine-learning #deep-learning #time-series #forecasting #tensorflow.js

Вопрос:

Я новичок в машинном обучении и сейчас работаю над проектом по прогнозированию временных рядов.Я запутался, почему прогнозируемые данные после обучения модели не похожи на фактические данные.

смотрите данные здесь

Я использую tensorflow.js с помощью reactjs кто-нибудь может мне помочь,что не так с созданной моделью? Ниже приведен код этой модели..

Любой, кто мне поможет, будет признателен..

     ...
    let x = tf.tensor2d(labels,[labels.length,1]);
    let y = tf.tensor2d(inputs,[inputs.length,1]);

    let inputSteps = inputs.length / 3;
    let labelSteps = labels.length / 3;

    let xs = x.reshape([3,inputSteps,1]);
    let ys = y.reshape([3,labelSteps,1]);

    const epochs = 30;
    const window_size = 10;
    const batchSize = 3;
    const shuffle = true;

    const input_layer_neurons = [inputSteps,1];
    
    const rnn_input_shape = input_layer_neurons;
    
    model.add(tf.layers.dense({ inputShape: input_layer_neurons,units:512 }));
    
    let lstm_cells = [];
    
    for(let i=0; i < hiddenLayers; i  ){
        lstm_cells.push(tf.layers.lstmCell({ units:20 }));
    }   
    
    model.add(tf.layers.lstm({
        cell: lstm_cells,
        units: 50,
        activation: 'relu',
        inputShape: rnn_input_shape,
        returnSequences: true
    }))
    
    model.add(tf.layers.dense({ units:1,returnSequences:true }));
    
    model.compile({
        optimizer: tf.train.adam(0.0005),
        loss: tf.losses.meanSquaredError,
        metrics:['mse'],
      });

    const lossError = [],quantityEpochs = [];
    
    await model.fit(xs, ys, {shuffle,batchSize,epochs,callbacks: { 
        onEpochEnd: async (epoch,log) => {
            console.log('loss : '   log.loss);
            lossError.push(log.loss);
            quantityEpochs.push(epoch); 
        }
    }});

    const outps = model.predict(ys);
    
    ...
 

Комментарии:

1. Я ничего об этом не знаю tensorflow.js , но идея в глубоком обучении та же самая. Я имею в виду, что ваша модель, по крайней мере, дает некоторые результаты, так что я не думаю, что с ней есть какие-либо проблемы. Таким образом, добавление большего количества данных, большего количества слоев и усложнение модели будут работать.

Ответ №1:

Я не вижу здесь ничего плохого.

введите описание изображения здесь

Ваша модель работает просто отлично. Прогнозируемые значения никогда не будут совпадать с фактическими, если вы, черт возьми, не переосмыслите свою модель (и тогда она не будет обобщаться). В любом случае, ваш график показывает, что модель обучается.

Вот что вы можете сделать, чтобы получить лучшие результаты —

  1. Немного больше тренировок можно провести с большим количеством эпох, чтобы еще больше снизить потери.
  2. Если потеря не идет дальше, параметры могут быть добавлены несколькими слоями, тогда модель нуждается в большей сложности, чтобы лучше учиться. Это означает, что вам нужно больше обучаемых параметров (больше слоев, большие слои и т. Д.)