从同一检查点加载的两个模型(具有相似的超参数)在 PYTORCH 中给出不同的训练结果

Two models ( with similar hyperparameters) loaded from same checkpoint giving different training results in PYTORCH

我训练了一个模型 (Lenet-5) 10 个 epoch 并保存了模型。 加载到 2 个模型中‘new_model’,‘new_model2’ 下面是 colab link https://colab.research.google.com/drive/1qQhyTWNzCgMYn8t0ZtIZilLgk4JptbJG?usp=sharing

训练了 5 个时期的新模型,但最终每个时期的训练和测试精度都不同,尽管从同一模型加载并设置了再现性设置。

当我继续训练原来的模型5个epoch后,结果也和2个新模型的训练结果不同。

原始模型(15 个 epoch)和 2 个新模型(从检查点加载后 5 个 epoch)的测试和训练精度是否可能相同?

(加载检查点后,我对所有 3 个模型都获得了相同的测试精度,但结果在每个模型的进一步训练中有所偏差。)

您应该在启动实验之前将所有种子重置为固定值每次启动实验。简而言之,顺序应该是这样的:

  1. 设置种子
  2. 训练新模型 #1
  3. (再次)将种子设置为相同的值。
  4. 训练新模型 #2

重用您的一些代码,我们可以定义一个函数来设置种子,应该在步骤 1 和 3 中使用相同的值调用该函数:

def set_seed(s):
   th.manual_seed(s)
   th.cuda.manual_seed_all(s)
   th.backends.cudnn.deterministic = True
   th.backends.cudnn.benchmark = False
   np.random.seed(s)
   random.seed(s)
   os.environ['PYTHONHASHSEED'] = str(s)