Deep learning 保存和加载模型后,Pyrotch中的结果不可再现

Deep learning 保存和加载模型后,Pyrotch中的结果不可再现,deep-learning,pytorch,Deep Learning,Pytorch,保存并加载模型后,我无法在PyTorch中重现结果,而内存中的模型按预期工作。仅出于上下文考虑,我正在为我的库设定种子,使用model.eval关闭辍学者,但结果仍然不可复制。如果我遗漏了什么,有什么建议吗。提前谢谢 我正在使用的库:- import matplotlib.pyplot as plt import torch from torch import nn from torch import optim import torch.nn.functional as F from torc

保存并加载模型后,我无法在PyTorch中重现结果,而内存中的模型按预期工作。仅出于上下文考虑,我正在为我的库设定种子,使用model.eval关闭辍学者,但结果仍然不可复制。如果我遗漏了什么,有什么建议吗。提前谢谢

我正在使用的库:-

import matplotlib.pyplot as plt
import torch
from torch import nn
from torch import optim
import torch.nn.functional as F
from torchvision import datasets, transforms
import numpy as np
import random
我正在播种的图书馆

manualSeed = 1
np.random.seed(manualSeed)
random.seed(manualSeed)
torch.manual_seed(manualSeed)
random.seed(manualSeed)
下面是内存和加载模型的结果

In Memory model Loss : 1.596395881312668, In Memory model Accuracy : tensor(0.3989)
Loaded model Loss : 1.597083057567572, Loaded model Accuracy : tensor(0.3983)
论不可再现性 这些值非常接近,所以它们不是不可复制的,误差是相当大的

发件人:

有一些PyTorch函数使用CUDA函数,可以是 非决定论的根源。其中一类CUDA函数是原子函数 操作,特别是atomicAdd,其中 相同值的加法是不确定的,对于浮点 变量,结果中的方差来源

模型越复杂,基于函数的随机方差发生的几率就越大,使用原子加法(atomicAdd)纯粹是巧合,本质上存在一些你无法克服的内在方差

提高CUDA的再现性 我假设您正在GPU上运行推理,您也应该使用这两个函数:

torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
请记住,在进行推理之前,以相同的方式对两种结果进行排序,您应该会看到结果彼此更接近。

关于不可再现性 这些值非常接近,所以它们不是不可复制的,误差是相当大的

发件人:

有一些PyTorch函数使用CUDA函数,可以是 非决定论的根源。其中一类CUDA函数是原子函数 操作,特别是atomicAdd,其中 相同值的加法是不确定的,对于浮点 变量,结果中的方差来源

模型越复杂,基于函数的随机方差发生的几率就越大,使用原子加法(atomicAdd)纯粹是巧合,本质上存在一些你无法克服的内在方差

提高CUDA的再现性 我假设您正在GPU上运行推理,您也应该使用这两个函数:

torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

请记住,在进行推理之前,以相同的方式对这两个模型进行种子设定,您应该会看到结果彼此更加接近。

请发布更多的上下文或代码示例,详细介绍模型以及与内存模型的差异。@amdex我添加了一些小代码和结果。请让我知道我是否应该让它更具信息性。谢谢。如果你能添加模型定义,不管你是否在GPU上运行它都会很好。这也有助于您输出更多的上下文或代码示例、模型的详细信息以及与内存模型的差异。@amdex我添加了一些小代码和结果。请让我知道我是否应该让它更具信息性。谢谢。如果你能添加模型定义,不管你是否在GPU上运行它都会很好。这也有助于你走出困境