我具有以下输入数据结构:
X1 | X2 | X3 | ... | Output (Label)
118.12341 | 118.12300 | 118.12001 | ... | [a value between 0 & 1] e.g. 0.423645
在这里使用tensorflow
的目的是为了解决此处预测Output
变量的未来值的回归问题。为此,我建立了一个前馈神经网络,该网络具有三个具有relu
激活功能的隐藏层和一个具有linear activation
一个节点的最终输出层。该网络使用adam
优化器进行反向传播训练。
我的问题是,在将网络训练了数千个纪元之后,我意识到输入要素和输出中的这个高十进制值导致预测仅接近第二个小数位,例如:
Real value = 0.456751 | Predicted value = 0.452364
但是这是不可接受的,我需要至少精确到小数点后四位才能接受该值。
问:是否有可信赖的技术来正确解决此问题以获得更好的结果(也许是转换算法)?
谢谢。
答案 0 :(得分:2)
假设您使用的是常规的MSE丢失,这可能不适合您在每个实例的错误中容忍度相对较低的目的。详细说来,MSE的定义如下the average of the the square of the differences between the predicted and true outputs
。
假设您有4个实例,并且两个受过训练的函数每个实例都会产生以下错误:
F1错误率:(4,.0004,.0002,.0002)
F2错误率:(.9,.9,.9,.9)
很明显,MSE会采用F2,因为平均MSE为.81,而F1的平均MSE约为16。
因此,可以得出结论,由于应用了square
函数,MSE对值<1的较小差异的权重太小,而对于值> 1的较大差异则权重被夸大。
您可以尝试MAE,MAE代表MEAN ABSOLUTE ERROR,它是唯一的区别在于它不对单个错误执行平方函数,而是计算绝对值。还有许多其他回归损失可能会严重影响较小的错误,例如具有较小增量(<0)的HUBER
损失,您可以详细了解这些损失here。
另一种可能的解决方案是将其转换为分类问题,例如,如果预测与至小数点后第四位的输出完全相同,则预测为真,否则为假。