我应该在我的神经网络的最后一层中使用浮点数还是类作为输出?

时间:2019-05-17 00:03:17

标签: neural-network deep-learning

我正在研究一个深度学习问题,我试图根据观察到的地震时间序列来预测实验室地震数据的失效时间。目标是单个整数(到下次地震的时间),范围从1到10。

我可以设计最后一层以返回单个浮点,并使用均方误差(MSE)作为使返回的浮点接近所需整数的损失。或者,我可以将每个整数可能性视为一个“类”,并使用交叉熵(CE)损失进行优化。

是否有任何论点支持这些选项?

此外,如果目标是从1到10的浮点数怎么办?我也可以把它变成类/ CE问题。

到目前为止,我已经尝试过CE选项(在某些级别上可以使用),并且正在考虑尝试使用mse选项,但是想退后一步,然后再进行思考。这样的想法将包括为什么一种方法可能胜过另一种方法的推理。

我正在使用pytorch版本1.0.1和Python 3.7。

感谢任何指导。

1 个答案:

答案 0 :(得分:0)

我决定只在Pytorch中实现带有L1Loss的浮头,并创建了一个简单但有效的合成数据集来测试实现。数据集创建的图像随机绘制了许多小方块。训练标签只是将平方数除以10(一个带有一位小数的浮点数)。 网络训练非常迅速且具有很高的精确度-测试样本正确到一位小数位。

对于最初的问题,我所做的跑步肯定会偏爱浮法。

我对此的看法是,类的实现在分配类时有一个基本的不精确性,也许更重要的是,类实现没有“度量”的概念。也就是说,即使类实现不具有“关闭”的概念,即使没有完全匹配,float实现也会尝试生成与输入标签“关闭”的输出标签。

Pytorch警告。如果要安装一个浮子,请确保在数据生成器中将其装入长度为1的向量中。 Pytorch无法处理“裸”浮点数(即使在完成批处理后它确实成为矢量)。但它没有抱怨。这花了我很多时间。