小编Aid*_*aly的帖子

深度神经网络的图像识别精度,浮点数还是双精度数?

用于图像识别的神经网络可能非常大。可能有数千个输入/隐藏神经元,数百万个连接会占用大量计算机资源。

虽然浮点数在 c++中通常是 32 位和64 位,但它们在速度上没有太大的性能差异,但使用浮点数可以节省一些内存。

有一个神经网络是什么使用sigmoid作为激活函数,如果我们可以选择神经网络中的哪些变量可以是float或double,哪些可以float来节省内存而不会使神经网络无法执行?

虽然训练/测试数据的输入和输出绝对可以是浮点数,因为它们不需要双精度,因为图像中的颜色只能在 0-255 的范围内,当归一化为 0.0-1.0 比例时,单位值将为 1 / 255 = 0.0039 ~

1.隐藏神经元的输出精度怎么样,让它们也浮动是否安全?

隐藏神经元的输出从前一层神经元输出的总和 * 其与当前正在计算的神经元的连接权重中获取值,然后将总和传递给激活函数(当前为 sigmoid)以获得新的输出。Sum 变量本身可能是双倍的,因为当网络很大时它可能会变成一个非常大的数字。

在此处输入图片说明

2. 连接权重怎么样,它们可以是浮点数吗?

由于 sigmoid,输入和神经元的输出在 0-1.0 的范围内,但允许权重大于此值。


由于激活函数的导数,随机梯度下降反向传播会遇到梯度消失问题,我决定不把它作为梯度变量应该是什么精度的问题,感觉浮点数根本不够精确,特别是当网络很深时.

c++ precision machine-learning neural-network

5
推荐指数
1
解决办法
7430
查看次数

在内核运行时将数据传输到GPU以节省时间

GPU在并行计算方面非常快,并且执行CPU的速度为15-30(有些甚至报告甚至50倍)然而,GPU内存与CPU内存相比非常有限,GPU内存与CPU之间的通信速度并不快.

让我们说我们有一些不适合GPU内存的数据,但我们仍然想用它来计算奇迹.我们可以做的是将数据分成几部分并逐一将其提供给GPU.

将大数据发送到GPU可能需要一些时间,人们可能会想,如果我们将数据块分成两部分并提供前半部分,运行内核然后在内核运行时提供另一半,该怎么办?

通过这种逻辑,我们应该节省一些时间,因为数据传输应该在计算过程中进行,希望不会中断它的工作,一旦完成,它就可以继续它的工作,而无需等待新的数据路径.

我必须说我是gpgpu的新手,对cuda是新手,但我一直在尝试使用简单的cuda代码,并注意到用于在CPU和GPU之间传输数据的函数cudaMemcpy将阻止kerner运行.它将等到内核完成然后才能完成它的工作.


我的问题是,是否有可能完成上述内容,如果可以,可以展示一个例子或提供一些如何完成的信息来源?

谢谢!

cuda gpgpu

3
推荐指数
1
解决办法
656
查看次数

标签 统计

c++ ×1

cuda ×1

gpgpu ×1

machine-learning ×1

neural-network ×1

precision ×1