在PyTorch中,设置随机种子可以使得每次运行代码时生成的随机数相同,这对于模型的可重复性和调试非常有用。以下是使用PyTorch设置随机种子的完整攻略,包括两个示例说明。
1. 设置全局随机种子
以下是使用PyTorch设置全局随机种子的步骤:
- 导入必要的库
python
import torch
import random
import numpy as np
- 设置随机种子
python
# 设置随机种子
seed = 42
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
np.random.seed(seed)
random.seed(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
在上述代码中,我们设置了PyTorch、NumPy和Python的随机种子,并且还设置了CUDA的随机种子,以确保在使用GPU时也能够得到相同的结果。此外,我们还将deterministic
设置为True
,以确保每次运行代码时都使用相同的算法,而将benchmark
设置为False
,以避免由于不同的硬件和软件配置而导致的性能差异。
- 运行代码
python
# 运行代码
# ...
运行上述代码时,每次生成的随机数都将相同。
2. 设置模型随机种子
以下是使用PyTorch设置模型随机种子的步骤:
- 导入必要的库
python
import torch
import torch.nn as nn
import torch.nn.functional as F
import random
import numpy as np
- 定义模型
```python
# 定义模型
class Net(nn.Module):
def init(self):
super(Net, self).init()
self.conv1 = nn.Conv2d(1, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 4 * 4, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 4 * 4)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
```
- 设置随机种子
```python
# 设置随机种子
seed = 42
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
np.random.seed(seed)
random.seed(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
# 设置模型随机种子
for param in net.parameters():
param.requires_grad = False
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
np.random.seed(seed)
random.seed(seed)
```
在上述代码中,我们首先设置了全局随机种子,然后对于每个模型参数,我们都设置了相同的随机种子,以确保每次运行代码时生成的随机数相同。
- 运行代码
python
# 运行代码
# ...
运行上述代码时,每次生成的随机数都将相同,并且模型的可重复性得到了保证。
以上就是使用PyTorch设置随机种子的完整攻略,包括两个示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch中如何设置随机种子 - Python技术站