torch.manual_seed() 和 torch.cuda.manual_seed() 功能及实例

本文介绍如何在PyTorch中设置随机数种子,确保每次运行生成相同的随机数,适用于CPU和GPU环境。通过设置torch.manual_seed和torch.cuda.manual_seed,实现实验结果的可复现性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能

  • 设置固定生成随机数的种子,使得每次运行该 .py 文件时生成的随机数相同

设置方法

  • CPU:torch.manual_seed(整数)
    • 官方文档:https://pytorch.org/docs/stable/torch.html?highlight=manual_seed#torch.manual_seed
  • GPU:torch.cuda.manual_seed(整数)
    • 官方文档:https://pytorch.org/docs/stable/cuda.html?highlight=manual_seed#torch.cuda.manual_seed

实例

# 需要注意不要在终端中单行敲入运行如下代码,要将如下代码先拷贝到 *.py 文件中,再在终端命令中通过 python *.py 运行

import torch

if torch.cuda.is_available():
    print("gpu cuda is available!")
    torch.cuda.manual_seed(1000)
else:
    print("cuda is not available! cpu is available!")
    torch.manual_seed(1000)

print(torch.rand(1, 2))
如何禁用分布式训练# from header import * # from datasets import * # from model import * # from config import * # # # def parser_args(): # parser = argparse.ArgumentParser(description='train parameters') # # 基础参数 # parser.add_argument('--model', type=str) # 模型类型(如ImageBind+Vicuna) # parser.add_argument('--local_rank', default=0, type=int) # GPU编号 # parser.add_argument('--save_path', type=str) # parser.add_argument('--log_path', type=str) # 日志 # # # 模型配置参数 # parser.add_argument('--imagebind_ckpt_path', type=str) # ImageBind预训练权重路径 # parser.add_argument('--vicuna_ckpt_path', type=str) # Vicuna预训练权重路径 # parser.add_argument('--delta_ckpt_path', type=str) # 第一阶段训练的增量参数路径 # parser.add_argument('--max_tgt_len', type=int) # 输入序列的最大长度 # parser.add_argument('--stage', type=int) # 阶段 微调/测试 # # # 数据配置参数 # parser.add_argument('--data_path', type=str) # 训练数据路径 # parser.add_argument('--image_root_path', type=str) # 图像数据根目录 # # return parser.parse_args() # # # def initialize_distributed(args): # # 从环境变量获取分布式训练参数 # args['master_ip'] = os.getenv('MASTER_ADDR', 'localhost') # 主节点IP # args['master_port'] = os.getenv('MASTER_PORT', '6000') # 主节点端口 # args['world_size'] = int(os.getenv('WORLD_SIZE', '1')) # 总GPU数量 # args['local_rank'] = int(os.getenv('RANK', '0')) % torch.cuda.device_count() # # # 设置当前GPU设备 # device = args['local_rank'] % torch.cuda.device_count() # torch.cuda.set_device(device) # # # 初始化分布式训练环境(使用NCCL后端) # deepspeed.init_distributed(dist_backend='nccl') # # def set_random_seed(seed): # if seed is not None and seed > 0: # random.seed(seed) # np.random.seed(seed) # torch.manual_seed(seed) # torch.random.manual_seed(seed) # torch.cuda.manual_seed(seed) # torch.cuda.manual_seed_all(seed) # # # def config_env(args): # args['root_dir'] = '../' # 项目根目录 # args['mode'] = 'train' # 运行模式(训练/测试) # # # 加载配置文件(假设lo
最新发布
03-22
import os import numpy as np import pandas as pd from PIL import Image from torch.optim.lr_scheduler import StepLR from sklearn.metrics import r2_score from torch.utils.data import Dataset, DataLoader from torchvision import transforms import torch import torch.nn as nn import random import torch.optim as optim def RMSE_funnc(actual, predicted): #actual = actual.detach().numpy() predicted = predicted diff = np.subtract(actual, predicted) square = np.square(diff) MSE = square.mean() RMSE = np.sqrt(MSE) return RMSE def seed_torch(seed=16): random.seed(seed) os.environ['PYTHONHASHSEED'] = str(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed(seed) #torch.cuda.manual_seed_all(seed) # if you are using multi-GPU. torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True #torch.backends.cudnn.enabled = False seed_torch() # 数据路径 train_folder = r"E:\xyx\GASF_images\PG\train" pre_folder = r"E:\xyx\GASF_images\PG\pre" val_folder = r"E:\xyx\GASF_images\PG\val" train_excel = r"E:\xyx\随机数据集\PG\798\train_data_PG.csv" pre_excel = r"E:\xyx\随机数据集\PG\798\test_data_PG.csv" val_excel = r"E:\xyx\随机数据集\PG\798\val_data_PG.csv" class FruitSugarDataset(Dataset): def __init__(self, image_folder, excel_file, transform=None): self.data = pd.read_csv(excel_file, header=None) self.image_folder = image_folder # self.transform = transform def __len__(self): return len(self.data) def __getitem__(self, idx): row = self.data.iloc[idx] img_name = f"{int(row[0])}.png" # 第一列是图像文件名 label = row.iloc[-1] # 标签为最后一列 img_path = os.path.join(self.image_folder, img_name) if not os.path.exists(img_path): raise FileNotFoundError(f"Image file {img_name} not found in {self.image_folder}") # img = Image.open(img_path).convert("RGB") # if self.transform: # img = self.transform(im
03-10
SEED = 123#随机种子设置部分以下 torch.manual_seed(SEED)# 固定PyTorch随机种子 torch.backends.cudnn.deterministic = False# 允许CUDA优化 torch.backends.cudnn.benchmark = False np.random.seed(SEED)# 固定Numpy随机种子 def weights_init_normal(m):#权重初始化函数部分 if type(m) == nn.Conv2d:# 对2D卷积层正态初始化 torch.nn.init.normal_(m.weight.data, 0.0, 0.02) elif type(m) == nn.Conv1d:#对2D卷积(nn.Conv2d)1D卷积(nn.Conv1d)使用相同的初始化策略 采用小标准差(0.02)的正态分布: torch.nn.init.normal_(m.weight.data, 0.0, 0.02) elif type(m) == nn.BatchNorm1d:# 对1D批归一化层初始化 torch.nn.init.normal_(m.weight.data, 1.0, 0.02) torch.nn.init.constant_(m.bias.data, 0.0) def main(config, fold_id): batch_size = config["data_loader"]["args"]["batch_size"] logger = config.get_logger('train') # build model architecture, initialize weights, then print to console model = config.init_obj('arch', module_arch) model.apply(weights_init_normal) logger.info(model) # get function handles of loss and metrics criterion = getattr(module_loss, config['loss']) metrics = [getattr(module_metric, met) for met in config['metrics']] # build optimizer trainable_params = filter(lambda p: p.requires_grad, model.parameters()) optimizer = config.init_obj('optimizer', torch.optim, trainable_params) data_loader, valid_data_loader, data_count = data_generator_np(folds_data[fold_id][0], folds_data[fold_id][1], batch_size) weights_for_each_class = calc_class_weight(data_count) trainer = Trainer(model, criterion, metrics, optimizer, config=config, data_loader=data_loader, fold_id=fold_id, valid_data_loader=valid_data_loader, class_weights=weights_for_each_class) trainer.train() if __name__ == '__main__': args = argparse.ArgumentParser(description='PyTorch Template') args.add_argument('-c', '--config', default="config.json", type=str, help='config file path (default: None)') args.add_argument('-r', '--resume', default=None, type=str, help='path to latest checkpoint (default: None)') args.add_argument('-d', '--device', default="0", type=str, help='indices of GPUs to enable (default: all)') args.add_argument('-f', '--fold_id', type=str, help='fold_id') args.add_argument('-da', '--np_data_dir', type=str, help='Directory containing numpy files') CustomArgs = collections.namedtuple('CustomArgs', 'flags type target') options = [] args2 = args.parse_args() fold_id = int(args2.fold_id) config = ConfigParser.from_args(args, fold_id, options) if "shhs" in args2.np_data_dir: folds_data = load_folds_data_shhs(args2.np_data_dir, config["data_loader"]["args"]["num_folds"]) else: folds_data = load_folds_data(args2.np_data_dir, config["data_loader"]["args"]["num_folds"]) main(config, fold_id) 请逐行解释该部分代码,并标出调用其他文件的指令部分,训练过程有没有调用其他部分的代码指令
03-08
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn-WJW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值