我应用了本教程https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/23_Time-Series-Prediction.ipynb (在不同的数据集上),该模型不计算单个输出的均方误差,因此我在比较函数中添加了以下行:
mean_squared_error(signal_true,signal_pred)但在测试数据上,预测的损失和均方误差与model.evaluation的损失和均方误差不同。来自model.evaluation (损失、mae、mse)的错误(测试集):
[0.013499056920409203, 0.07980187237262726, 0.013792216777801514]来自单个目标(输出)的错误:
Target0 0.167851388666284
Target1 0.6068108648555771
Target2 0.1710370357827747
Target3 2.747463225418181
Target4 1.7965991690103074
Target5 0.9065426398192563 我认为在训练模型时可能会有问题,但我找不到它的确切位置。我真的很感谢你的帮助。
谢谢
发布于 2020-03-26 13:04:09
培训损失和评估损失之间可能存在差异的原因有很多。
我不确定你到底遇到了什么问题,但它可能是由许多不同的东西引起的,而且通常很难调试。
发布于 2020-08-17 23:37:17
我也遇到了同样的问题,并找到了解决方案。希望这和你遇到的问题是一样的。
事实证明,model.predict不会像generator.labels那样以相同的顺序返回预测,这就是为什么当我尝试手动计算(使用scikit learn度量函数)时,MSE要大得多。
>>> model.evaluate(valid_generator, return_dict=True)['mean_squared_error']
13.17293930053711
>>> mean_squared_error(valid_generator.labels, model.predict(valid_generator)[:,0])
91.1225401637833我的快速和肮脏的解决方案:
valid_generator.reset() # Necessary for starting from first batch
all_labels = []
all_pred = []
for i in range(len(valid_generator)): # Necessary for avoiding infinite loop
x = next(valid_generator)
pred_i = model.predict(x[0])[:,0]
labels_i = x[1]
all_labels.append(labels_i)
all_pred.append(pred_i)
print(np.shape(pred_i), np.shape(labels_i))
cat_labels = np.concatenate(all_labels)
cat_pred = np.concatenate(all_pred)结果是:
>>> mean_squared_error(cat_labels, cat_pred)
13.172956865002352这可以做得更优雅,但足以让我确认我对问题的假设,并恢复一些理智。
https://stackoverflow.com/questions/60859191
复制相似问题