我使用 gpu 计算编写了自己的带有反向传播的神经网络库。想让它通用,我不必检查训练集是否适合 gpu 内存。
当训练集太大而无法放入 gpu 内存时,如何训练神经网络?我假设它适合主机的 RAM。
我必须对第一个片段进行训练迭代,然后在设备上将其释放,然后将第二个片段发送到设备并对其进行训练,依此类推......然后总结梯度结果。
当我必须通过 PCIe 总线推送所有数据时,它不会太慢吗?你有更好的主意吗?
我使用 gpu 计算编写了自己的带有反向传播的神经网络库。想让它通用,我不必检查训练集是否适合 gpu 内存。
当训练集太大而无法放入 gpu 内存时,如何训练神经网络?我假设它适合主机的 RAM。
我必须对第一个片段进行训练迭代,然后在设备上将其释放,然后将第二个片段发送到设备并对其进行训练,依此类推......然后总结梯度结果。
当我必须通过 PCIe 总线推送所有数据时,它不会太慢吗?你有更好的主意吗?
使用小批量梯度下降:在一个循环中,
重复这个循环几次,直到网络收敛。
这并不完全等同于简单的批量学习算法(批量梯度下降):实际上它通常比批量学习收敛得更快。如果您在每个训练循环之前随机打乱样本,这会有所帮助。所以你仍然有内存传输,但你不需要那么多的迭代,算法会运行得更快。