关于np.random.seed(argument)函数

本文解释了在神经网络中使用np.random.seed()进行随机数生成的原理,阐述了seed参数如何确保不同环境下生成相同的随机数序列,以及该函数对后续随机数生成的影响。

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

在学习神经网络时经常要对参数随机初始化,要用到np.random.seed(),括号里的数字有时是0,1还有其他数字,不太理解括号里的数字是什么意思,以及这个函数的用法,后来看了一些博客,以及这个博客写的https://www.cnblogs.com/subic/p/8454025.html

明白了一些。

np.random.seed(argument)里的argument的作用是给出产生随机数的起始的位置,所以,就算在不同的电脑上,同样的参数意味着生成的随机数也是一样的。

再者,这个函数的作用范围总结一下就是只要没有重新调用这个函数,这个种子就影响着之后的每一次随机数生成,即函数np.random.randn()或其他生成随机数函数。而当重新调用了这个函数np.random.seed(argument),就会重新从由argument指出的起始位置开始生成随机数。

import os # os.environ["CUDA_VISIBLE_DEVICES"] = "0" import argparse import time import cv2 import json import numpy as np from tqdm import tqdm from model import build_model from dataset import build_dataset from utils.func import split_list, get_chunk from utils.prompt import Prompter import random, pickle, torch import torch.backends.cudnn as cudnn def get_model_activtion(args, data, model, answer_file): all_results = [] for ins in tqdm(data): img_path = ins['img_path'] img_id = img_path.split("/")[-1] prompt = ins['question'] answer = ins['answer'] label = ins["label"] hidden_states, mlp_residual, attn_residual, attn_heads, vit_attn_heads = model.get_activations(img_path, prompt, answer) # outputs = model._basic_forward(img_path, prompt, answer, return_dict=True) out = { "image": img_id, "img_path": img_path, "model_name": args.model_name, "question": prompt, "answer": answer, "label": label, "attn_residual": attn_residual[:, -1].cpu(), "hidden_states": hidden_states[:, -1].cpu(), "mlp_residual": mlp_residual[:, -1].cpu(), "attn_heads": attn_heads[:, -1].cpu(), "vit_attn_heads": vit_attn_heads.mean(1).cpu(), "hidden_states_mean": hidden_states.mean(1).cpu(), # "scenario": ins['scenario'] } all_results.append(out) with open(answer_file, 'wb') as file: pickle.dump(all_results, file) def setup_seeds(seed=42): random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) cudnn.benchmark = False cudnn.deterministic = True def main(args): setup_seeds() model = build_model(args) prompter = Prompter(args.prompt, args.theme) pos_data, neg_data = build_dataset(args.dataset, args.split, prompter) data = pos_data + neg_data if not os.path.exists(f"./output/{args.model_name}/"): os.makedirs(f"./output/{args.model_name}/") saved_file = f"./output/{args.model_name}/{args.model_status}_{args.dataset}_{args.split}_{args.answer_split}_{args.prompt}_activations.pkl" results = get_model_activtion(args, data, model, saved_file) print(f'Saved activations to {saved_file}.') if __name__ == "__main__": parser = argparse.ArgumentParser(prog='Run a model') parser.add_argument("--model_name", default="LLaVA-7B") parser.add_argument("--model_path", default="./llava-v1.5-7b") parser.add_argument("--num_samples", type=int, default=None) parser.add_argument("--sampling", choices=['first', 'random', 'class'], default='first') parser.add_argument("--split", default="test") # SD_TYPO parser.add_argument("--dataset", default="mmsafety") parser.add_argument("--prompt", default='oe') parser.add_argument("--theme", default='mad') parser.add_argument("--activation_file", type=str, default="./output/test.pkl") parser.add_argument("--answer_file", type=str, default="./output/test.jsonl") parser.add_argument("--answer_split", default="all") parser.add_argument("--model_status", default="raw") parser.add_argument("--num_chunks", type=int, default=1) parser.add_argument("--chunk_idx", type=int, default=0) parser.add_argument("--temperature", type=float, default=0.0) parser.add_argument("--top_p", type=float, default=None) parser.add_argument("--num_beams", type=int, default=1) parser.add_argument("--token_id", type=int, default=0) parser.add_argument("--load-8bit", action="store_true") parser.add_argument("--load-4bit", action="store_true") # parser.add_argument("--max-length", type=int, default=64) main(parser.parse_args()) 这是run_model.py文件,请逐行解释
03-25
``` import argparse import collections import numpy as np import torch import torch.nn as nn from parse_config import ConfigParser from trainer import Trainer from utils.util import * from data_loader.data_loaders import * import model.loss as module_loss import model.metric as module_metric import model.model as module_arch # 固定随机种子以提高可重复性 SEED = 123 torch.manual_seed(SEED) torch.backends.cudnn.deterministic = False torch.backends.cudnn.benchmark = False np.random.seed(SEED) def weights_init_normal(m): if isinstance(m, (nn.Conv1d, nn.Conv2d)): nn.init.normal_(m.weight.data, 0.0, 0.02) elif isinstance(m, nn.BatchNorm1d): nn.init.normal_(m.weight.data, 1.0, 0.02) 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') # 构建模型并初始化权重 model = config.init_obj('arch', module_arch) model.apply(weights_init_normal) logger.info(model) # 获取损失函数和评估指标 criterion = getattr(module_loss, config['loss']) metrics = [getattr(module_metric, met) for met in config['metrics']] # 构建优化器 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=model, criterion=criterion, metrics=metrics, optimizer=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-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值