Weight & Bias
待完成
- 源码细节整理
torch.inference_mode()
with no_gradient的一种加速 参考文档
nn.MarginRankingLoss()
文档 margin = 0 x1大于x2 则去-y,viceversa 取 y
*loss(x1,x2,y)=max(0,−y∗(x1−x2)+margin)*
这里最后的loss是平均后的
1 | loss = nn.MarginRankingLoss() |
gc.collect()
清除内存
defaultdict
获得创建key不给value也不报错的dict
1 | from collections import defaultdict |
StratifiedKFold()
1 | from sklearn.model_selection import StratifiedKFold, KFold |
第五行 将X分k折,y标签为样本对应index,fold 在 0~5
得到df[“kfold”] 列包含 属于第几折的 valid数据
通过下面的函数直接选择非本折的数据作为train,其他的就是valid
df_train = df[df.kfold != fold].reset_index(drop=True) df_valid = df[df.kfold == fold].reset_index(drop=True)
1 | def prepare_loaders(fold): |
tqdm
1 | bar = tqdm(enumerate(dataloader), total=len(dataloader)) |
单个epoch下面对bar做如下设置
1 | bar.set_postfix(Epoch=epoch, Valid_Loss=epoch_loss, |
Weights & Biases (W&B)
hash 一个项目id
train valid 定义一个 1个epoch 的函数 返回 分别其中的loss
wandb.log({“Train Loss”: train_epoch_loss}) 使用 log 方式记录 损失函数
run = wandb.init(project='Jigsaw', config=CONFIG, job_type='Train', group=CONFIG['group'], tags=['roberta-base', f'{HASH_NAME}', 'margin-loss'], name=f'{HASH_NAME}-fold-{fold}', anonymous='must')
run.finish()1
TRAIN PART
1
2
3
4显示如下
'hash--------name'
Syncing run k5nu8k69390a-fold-0 to Weights & Biases (docs).
流程训练提炼
- for fold in range(0, CONFIG[‘n_fold’])
- wandb.init
- prepare_loaders、fetch_scheduler
- run_training
- train_one_epoch、valid_one_epoch —-> to got model, loss for wandb
中间掺杂 W&B 的数据实时载入分析即可
df[‘y’].value_counts(normalize=True) to got the percentage of each values