训练模型后预测数据与实际数据不相似
Predicted data not similar with actual data after training model
我是机器学习的新手,现在正在做一个关于时间序列的项目forecasting.I很困惑为什么训练模型后的预测数据与实际数据不相似。
see the data here
我正在使用 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);
...
我看不出有什么问题。
您的模型运行良好。预测值永远不会与实际值相同,除非你过度拟合你的模型(然后它不会泛化)。无论如何,您的图表显示模型正在学习。
您可以通过以下方式获得更好的结果 -
- 可以用更多的 epoch 进行更多的训练,以进一步减少损失。
- 如果损失没有进一步下降,可以添加几层参数,那么模型需要更多的复杂性才能更好地学习。这意味着您需要更多可训练参数(更多层、更大层等)
我是机器学习的新手,现在正在做一个关于时间序列的项目forecasting.I很困惑为什么训练模型后的预测数据与实际数据不相似。
see the data here
我正在使用 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);
...
我看不出有什么问题。
您的模型运行良好。预测值永远不会与实际值相同,除非你过度拟合你的模型(然后它不会泛化)。无论如何,您的图表显示模型正在学习。
您可以通过以下方式获得更好的结果 -
- 可以用更多的 epoch 进行更多的训练,以进一步减少损失。
- 如果损失没有进一步下降,可以添加几层参数,那么模型需要更多的复杂性才能更好地学习。这意味着您需要更多可训练参数(更多层、更大层等)