一.設置腳本參數
1. 代碼示例
????????在完整的模型訓練代碼中,我們時常能看到通過python train.py --params 來訓練模型,這也是在無UI界面的服務器上訓練模型最主要的方法,因此使用腳本并設置腳本參數尤為重要.
? ? ? ? 我們通常會將腳本設置的代碼寫在config,py中,再用訓練主函數main.py進行函數調用:
from config import return_argsdef main():args = return_args()
? ? ? ? 由此我們可以節省主函數的空間,將代碼寫在config.py:
import argparseparser = argparse.ArgumentParser(description='Dogs VS Cats Classification')
parser.add_argument('--DIR', default='..', help='dataset location')
parser.add_argument('--split_ratio', type=float, default=0.8,help='default setting. train : val = 8 : 2')parser.add_argument('--epochs', type=int, default=5, help='number of epochs')
parser.add_argument('-b', '--batch-size', default=32,type=int, help='mini-batch size, 8.7G memory per gpu with bs32, swinB 224')
parser.add_argument('--lr', '--learning-rate', default=1e-5, type=float,metavar='LR', help='initial learning rate', dest='lr')
parser.add_argument('-j', '--workers', default=4, type=int, metavar='N',help='number of data loading workers (default: 32)')
parser.add_argument('--seed', default=42, type=int,help='seed for initializing training. ')parser.add_argument('-p', '--print_freq', default=10, type=int, metavar='N',help='print frequency')
parser.add_argument('-s', '--save', action='store_true',help='save best model')
parser.add_argument('--checkpoint', default=None, type=str,help='load model for testing')def return_args():args = parser.parse_args()return args
二.設置隨機種子
1.代碼示例
????????在深度學習實驗中,由于初始化權重、數據洗牌、Dropout等操作的隨機性,同一份代碼可能會得到不同的結果。為了使實驗結果可復現,我們通常會設置一個固定的隨機種子,這樣每次運行實驗時,所有的隨機操作都會有相同的結果。注意,盡管設置了隨機種子可以提高實驗的可復現性,但在某些情況下(例如使用多線程或特定的GPU操作)仍可能會有一些隨機性。
if args.seed is not None: # 如果提供了隨機種子random.seed(args.seed) # 為Python內置的隨機庫設置種子np.random.seed(args.seed) # 為NumPy的隨機庫設置種子torch.manual_seed(args.seed) # 為PyTorch的CPU隨機庫設置種子torch.cuda.manual_seed_all(args.seed) # 為PyTorch的所有GPU隨機庫設置種子cudnn.deterministic = True # 為CuDNN庫設置確定性模式,這可以確保每次運行網絡時相同輸入會有相同輸出
2.random.seed(42)中42是什么意思?
????????在這里,42
是一個隨機種子(random seed)。隨機種子是用于初始化一個隨機數生成器的數字。通過設置隨機種子,我們可以確保每次運行程序時,隨機數生成器產生的隨機數序列是一樣的,從而使得程序的運行結果具有可重復性。
????????為什么選擇42
作為隨機種子呢?這其實沒有特別的原因,42
只是一個常用的隨機種子。在某些情況下,人們可能會選擇42
作為隨機種子,因為42
在科幻小說《銀河系漫游指南》中被設定為“生命、宇宙以及任何事物的終極答案”。但實際上,你可以選擇任何你喜歡的數字作為隨機種子。只要隨機種子相同,那么生成的隨機數序列就會相同。這對于確保實驗的可重復性非常有用。