最近在下载mmaction2代码跑自己数据集上的训练的时候,对比日志发现两次训练的日志结果不一致,后来在传参文件里面找到下面的代码:
parser.add_argument('--seed', type=int, default=None, help='random seed')
本来以为训练阶段会有一个默认种子的,结果发现是自己想当然了,里面加上随机种子。然后发现mmaction2这个代码要保证结果一致性还需要加入第二个参数“--deterministic”,但是我在运行命令行加入这个参数会报错,查了一下好像是CUDA版本太高了的问题。
最后的解决
首先在train和test代码文件里面加上下面的代码:
os.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8'
接着命令行运行的时候指定随机种子和“--deterministic”,类似于:
CUDA_VISIBLE_DEVICES=3 python tools/train.py [config.py] --work-dir [target_log_dir] --seed 458937044 --deterministic
后面发现还可以找到确定随机种子的函数,把那部分函数抄到train和test代码文件里面,然后将设定随即种子放到merge config前面就行,也能固定住随机种子。