我在不同的数据集上应用了本教程https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/23_Time-Series-Prediction.ipynb,turorial并未从单个输出中计算均方误差,因此我在比较函数中添加了以下行:
mean_squared_error(signal_true,signal_pred)
但预测的损失和mse与模型的损失和mse不同。对测试数据的评估。来自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
我认为训练模型可能会出现问题,但我找不到确切的位置。我将衷心感谢您的帮助。
谢谢
答案 0 :(得分:1)
出于多种原因,您在培训损失和评估损失之间可能会有差异。
我不确定您遇到了什么问题,但这可能是由许多不同的原因引起的,通常很难调试。
答案 1 :(得分:0)
我遇到了同样的问题,并找到了解决方案。希望这是您遇到的相同问题。
事实证明,model.predict
不会以generator.labels
的顺序返回预测,这就是为什么当我尝试手动计算时,MSE会大很多(em> (使用scikit-learn指标函数。
>>> 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
这可以做得更优雅,但足以让我确认问题的假设并恢复理智。