【发布时间】:2018-07-04 21:11:52
【问题描述】:
我有一个关于时间序列的下一步预测模型,它只是一个 GRU,上面有一个全连接层。当我在 50 个 epoch 后使用 CPU 训练它时,我得到 0.10 的损失,但是当我用 GPU 训练它时,50 个 epoch 后的损失是 0.15。在这两种情况下,做更多的 epoch 并不能真正降低损失。
为什么在 CPU 上训练后的性能优于 GPU?
我尝试更改数据和模型的随机种子,这些结果与随机种子无关。
我有:
Python 3.6.2
PyTorch 0.3.0
CUDNN_MAJOR 7
CUDNN_MINOR 0
CUDNN_PATCHLEVEL 5
编辑:
我还在 GRU 和全连接层上使用 PyTorch 的权重归一化 torch.nn.utils.weight_norm。
【问题讨论】:
-
您正在进行基于小批量的培训吗?那么由于小批量,权重初始化等发生变化,后续运行之间的损失当然会发生变化......请详细说明
-
@kmario 正如问题中提到的那样,使用不同种子的多次运行都使用 CPU 给出相同的结果,并且它们都使用 GPU 给出相同的结果(这与 CPU 不同)。如果您在下面查看我的答案,您会发现如果我关闭 CUDNN,GPU 现在会给出与 CPU 相同的结果。
标签: python neural-network gpu pytorch cudnn