对于具有 0-255 个整数类型像素值的图像分类,是否有必要/建议使用神经网络将值转换为浮点数?这种转换似乎是不必要的(此外,float 会减慢矩阵运算的速度),但有几个实现遵循这种做法。为什么?
神经网络数据类型转换 - 从 int 浮点数?
数据挖掘
神经网络
2021-10-11 12:16:39
1个回答
从技术上讲,对于大多数语言,您可以为输入层传递整数特征,因为权重将是浮点数,并且将浮点数乘以整数将为您提供浮点数。此外,您通常不关心输入数据的偏导数,因此这些值是否离散并不重要。
然而:
对于所有权重和神经元激活,如果您使用基于反向传播的方法进行训练更新,那么您需要一种近似实数的数据类型,以便您可以基于微分应用分数更新。最佳权重值通常是小数,非整数。sigmoid 等非线性也会输出浮点数。因此,在输入层之后,无论如何您都有浮点值矩阵。将整数矩阵与浮点数相乘并没有太大的速度优势(可能甚至稍慢,具体取决于类型转换机制)。所以输入也可以是浮点数。
此外,为了有效训练,神经网络输入应该被归一化到一个特定的大致单位范围(-1.0 到 1.0)或均值 0,标准差 1.0。这两个都需要浮点表示。如果您的输入数据在 0-255 范围内(无论是否浮动),您通常会发现网络的学习效率较低。
在某些架构和学习算法中,这些规则存在例外情况,可能基于整数的输入会起作用,但对于最常见的 NN 类型,包括 MLP 和“深度”前馈网络,使用浮点数更简单、更容易数据类型。
其它你可能感兴趣的问题