返回

训练结果的稳定复现:PyTorch 和 TensorFlow 详解

人工智能

导言

在深度学习中,训练结果的复现至关重要,因为它确保了不同环境下的模型表现一致。然而,由于深度学习模型的随机性,实现复现可能具有挑战性。本文旨在深入探讨 PyTorch 和 TensorFlow 中控制随机性的方法,从而确保训练结果的稳定可复现。

PyTorch

在 PyTorch 中,随机性主要源自以下方面:

  • 随机数生成器 (RNG)
  • 数据加载器中的随机采样
  • 模型初始化

RNG

PyTorch 使用 NumPy 的随机数生成器,可以通过以下代码进行初始化:

torch.manual_seed(seed)

其中 seed 是一个整数,它决定了 RNG 生成的随机数序列。

数据加载器

在 PyTorch 中,数据加载器用于从训练集中加载数据。默认情况下,数据加载器使用随机采样,这会引入随机性。为了确保复现,可以设置 shuffle 参数为 False

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=False)

模型初始化

PyTorch 模型的权重通常使用随机值初始化。为了确保复现,可以设置 torch.nn.init 中的 manual_seed

torch.nn.init.manual_seed(seed)

TensorFlow

与 PyTorch 类似,TensorFlow 中的随机性也源自以下方面:

  • tf.random 模块
  • 数据加载器中的随机采样
  • 模型初始化

tf.random

TensorFlow 使用自己的一组随机数生成器,可以通过以下代码初始化:

tf.random.set_seed(seed)

数据加载器

TensorFlow 中的数据加载器同样使用随机采样。要确保复现,可以设置 shuffle 参数为 False

train_dataset = tf.data.Dataset.from_tensor_slices(train_data)
train_dataset = train_dataset.batch(64, drop_remainder=True, shuffle=False)

模型初始化

TensorFlow 模型的权重使用 tf.keras.initializers 中的各种初始化程序进行初始化。为了确保复现,可以设置这些初始化程序的 seed 参数:

model = tf.keras.Sequential([
  tf.keras.layers.Dense(units=10, kernel_initializer=tf.keras.initializers.glorot_uniform(seed=seed))
])

结论

通过应用本文概述的策略,可以在 PyTorch 和 TensorFlow 中确保训练结果的稳定复现。通过控制随机数生成、数据加载和模型初始化,深度学习模型的性能可以变得更加可靠和可预测,从而为研究人员和从业人员提供更可靠的基础。