【发布时间】:2017-03-25 01:34:33
【问题描述】:
用于图像识别的神经网络可能非常大。 可能有数千个输入/隐藏神经元,数百万个连接是什么 会占用大量计算机资源。
虽然在 c++ 中 float 通常是 32 位,double 是 64 位,但它们在速度上没有太大的性能差异,但使用浮点数可以节省一些内存。
拥有一个使用sigmoid作为激活函数的神经网络, 如果我们可以选择神经网络中的哪些变量可以是浮点数或双精度数 哪个可以浮动以节省内存而不会使神经网络无法执行?
虽然训练/测试数据的输入和输出绝对可以是浮点数 因为它们不需要双精度,因为图像中的颜色可以 仅在 0-255 范围内,当归一化 0.0-1.0 比例时,单位值为 1 / 255 = 0.0039~
1.隐藏神经元的输出精度如何? 让它们也漂浮起来安全吗?
隐藏神经元的输出从前一层神经元输出的总和 * 它与当前正在计算的神经元的连接权重得到它的值,然后将总和传递给激活函数(当前为 sigmoid)以获得新的输出。 Sum 变量本身可能是双倍的,因为当网络很大时它可能会变成一个非常大的数字。
2。那么连接权重呢,它们可以是浮点数吗?
由于 sigmoid,输入和神经元的输出在 0-1.0 范围内, 权重可以大于这个值。
Stochastic gradient descent backpropagation 受到vanishing gradient problem 的影响,因为激活函数的导数,我决定不把它作为梯度变量应该是什么精度的问题提出来,感觉浮点数根本不够精确,特别是当网络很深时。
【问题讨论】:
标签: c++ machine-learning neural-network precision