seed = init_random_seed(args.seed)

这可以确保每次运行实验时,得到的结果是可重复的意思是第一次运行准确率是90%,当忘了保存,需要进行运行第二次能不能得到90%这个准确率?

是的,这就是设置随机种子的目的。当你设置了随机种子后,每次运行实验都会得到相同的结果。

具体来说:

  1. 第一次运行实验得到 90% 的准确率。
  2. 如果你忘记保存模型,需要再次运行实验。
  3. 由于设置了相同的随机种子,第二次运行实验也会得到 90% 的准确率。

这是因为:

  • 设置随机种子可以确保每次实验中的随机初始化、数据采样等步骤都是相同的。
  • 这样,在其他条件不变的情况下,模型的训练和评估结果也会是一致的。

如果没有设置随机种子,那么每次运行实验时,这些随机过程可能会产生不同的结果,导致最终的准确率也会有所差异。

因此,设置随机种子是确保实验结果可重复的关键措施。只要你在第二次运行时使用了相同的随机种子,就能够再次得到 90% 的准确率。这有助于问题排查和结果分析。

只要你在第二次运行时使用了相同的随机种子的意思是seed = init_random_seed(args.seed)这里的等号左边还是等号右边?

这里的等号右边 init_random_seed(args.seed) 是初始化随机种子的函数调用,它会返回一个随机种子值。

这个返回的随机种子值会被赋值给等号左边的 seed 变量。

也就是说,在第二次运行实验时,你需要保证使用了相同的 args.seed 值作为输入,这样通过 init_random_seed(args.seed) 函数调用返回的 seed 值就会是相同的。

换句话说,你需要确保在第二次运行时使用了和第一次运行时完全相同的 args.seed 值。这样,通过 seed = init_random_seed(args.seed) 这一行代码,你就能得到和第一次运行时完全相同的随机种子 seed 值。

只有这样,后续通过 set_random_seed(seed, deterministic=args.deterministic) 设置各种随机数生成器的种子,你才能确保整个实验流程的确定性和可重复性。

总之,关键是要确保第二次运行时使用了和第一次完全相同的 args.seed 值作为输入。这样通过 seed = init_random_seed(args.seed) 就能得到相同的随机种子值。

parser.add_argument('--seed', type=int, default=None, help='random seed')发现默认是None

如果在命令行参数中设置的 --seed 参数默认值为 None,那么在代码中使用这个默认值会有一些问题。

让我们来分析一下这种情况下的流程:

这显然不利于实验的可重复性。

为了确保实验的可重复性,最好的做法是:

这样做可以确保即使没有在命令行指定 --seed 参数,程序也会使用一个固定的种子值,从而确保实验结果的可重复性。

总之,默认值为 None 可能会带来一些问题,最好设置一个固定的默认种子值,并在代码中对 args.seed 值进行判断和处理,以确保实验的可重复性。

  1. 在命令行启动程序时,如果没有指定 --seed 参数,那么 args.seed 就会被设置为 None
  2. 在代码中,你可能会有类似这样的初始化随机种子的代码:
    seed = init_random_seed(args.seed)

  3. 如果 args.seed 是 None,那么 init_random_seed(args.seed) 就会返回一个随机生成的种子值。
  4. 这意味着,如果你没有在命令行指定 --seed 参数,那么每次运行程序时都会得到不同的随机种子。
  5. 在命令行参数中设置 --seed 参数的默认值为一个固定的整数,例如 0
  6. 在代码中使用 args.seed 时,先判断其是否为 None。如果是 None,则手动设置一个固定的种子值,例如 0
解释parser.add_argument( "-r", "--resume", default=None, help="weights path for resume") parser.add_argument( "--slim_config", default=None, type=str, help="Configuration file of slim method.") parser.add_argument( "--enable_ce", type=bool, default=False, help="If set True, enable continuous evaluation job." "This flag is only used for internal test.") parser.add_argument( "--fp16", action='store_true', default=False, help="Enable mixed precision training.") parser.add_argument( "--fleet", action='store_true', default=False, help="Use fleet or not") parser.add_argument( "--use_vdl", type=bool, default=False, help="whether to record the data to VisualDL.") parser.add_argument( '--vdl_log_dir', type=str, default="vdl_log_dir/scalar", help='VisualDL logging directory for scalar.') parser.add_argument( '--save_prediction_only', action='store_true', default=False, help='Whether to save the evaluation results only') args = parser.parse_args() return args def run(FLAGS, cfg): # init fleet environment if cfg.fleet: init_fleet_env() else: # init parallel environment if nranks > 1 init_parallel_env() if FLAGS.enable_ce: set_random_seed(0) # build trainer trainer = Trainer(cfg, mode='train') # load weights if FLAGS.resume is not None: trainer.resume_weights(FLAGS.resume) elif 'pretrain_weights' in cfg and cfg.pretrain_weights: trainer.load_weights(cfg.pretrain_weights) # training trainer.train(FLAGS.eval) def main(): FLAGS = parse_args() cfg = load_config(FLAGS.config) cfg['fp16'] = FLAGS.fp16 cfg['fleet'] = FLAGS.fleet cfg['use_vdl'] = FLAGS.use_vdl cfg['vdl_log_dir'] = FLAGS.vdl_log_dir cfg['save_prediction_only'] = FLAGS.save_prediction_only merge_config(FLAGS.opt) place = paddle.set_device('gpu' if cfg.use_gpu else 'cpu') if 'norm_type' in cfg and cfg['norm_type'] == 'sync_bn' and not cfg.use_gpu: cfg['norm_type'] = 'bn' if FLAGS.slim_config: cfg = build_slim_model(cfg, FLAGS.slim_config) check.check_config(cfg) check.check_gpu(cfg.use_gpu) check.check_version() run(FLAGS, cfg)
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值