模型调参——让模型一次跑多个参数的结果
1、引言
跑深度学习代码的时候,需要调多个参数来得到最好的效果。比如:模型可能需要调节 学习率,epoch,batch等超参数。
我们可能会有一下调参需求:
- 依次调节不同参数,如:epoch=35,batch=32
- 调节同一个参数,如:epoch=35,epoch=40,epoch=45,epoch=50
通俗的说,之前是我们调节一个参数值后,让模型跑一次得到实验结果。再调节参数,让模型再跑一次。现如今,我们不想一个参数一个参数的调,费事,我们想让模型只跑一次,就可以得到多个参数的实验结果。
2、前提:将训练的结果都写入日志中
可以参考 python将日志写入文件(超详细)
因为每个参数值会得到一个实验结果,多个参数值就有多个参数结果,写入到日志后,等跑完实验后,就可以查看日志文件,进而得到多参数的实验结果。
3、实战:调节参数epoch,得到参数epoch分别为35,40,45,50,55的模型结果
原始.sh 文件,运行使用bash run_twitter15.sh
修改为run15.sh文件,满足让模型跑一次得到 参数epoch分别为35,40,45,50,55的结果。
然后等模型训练完,查看日志文件,即可看到epoch分别为35,40,45,50,55的模型结果。
4、实战:依次调节epoch,batch参数,得到epoch分别为35,40,45,50,55,batch分别为8 16 32 64的结果
- 想调节几个参数,就写几个for循环
run15.sh文件
#!/usr/bin/env bash
DATASET_NAME="twitter15"
BERT_NAME="bert-base"
# First loop for different epochs
for EPOCHS in 35 40 45 50 55
do
CUDA_VISIBLE_DEVICES=0 python -u run.py \
--dataset_name=${DATASET_NAME} \
--bert_name=${BERT_NAME} \
--num_epochs=${EPOCHS} \
--batch_size=32 \
--lr=3e-5 \
--warmup_ratio=0.01 \
--eval_begin_epoch=3 \
--seed=1234 \
--do_train \
--ignore_idx=0 \
--max_seq=128 \
--use_prompt \
--prompt_len=4 \
--sample_ratio=1.0 \
--save_path=best_model_twitter15
done
# Second loop for different batch sizes
EPOCHS=30 # 固定的epoch数
for BATCH_SIZE in 8 16 32 64
do
CUDA_VISIBLE_DEVICES=0 python -u run.py \
--dataset_name=${DATASET_NAME} \
--bert_name=${BERT_NAME} \
--num_epochs=${EPOCHS} \
--batch_size=${BATCH_SIZE} \
--lr=3e-5 \
--warmup_ratio=0.01 \
--eval_begin_epoch=21 \
--seed=1234 \
--do_train \
--ignore_idx=0 \
--max_seq=128 \
--use_prompt \
--prompt_len=4 \
--sample_ratio=1.0 \
--save_path=best_model_twitter17
done