本周主要的收获:
01对于模型调优器:Adamw有了更新的理解,其中param是需要可迭代的类型,列入下图中的 optimizer_group_parameters,列表中套用字典,可以对参数进行设置。因为Adamw中需要计算decay,但是可以选择一部分参数不需要计算decay,这就是里面设置字典的意义。
optimizer_group_parameters = [
{"params": [p for n, p in intent_with_bert_model.named_parameters()
if not any(nd in n for nd in no_decay) and p.requires_grad],
"weight_decay": weight_decay},
{"params": [p for n, p in intent_with_bert_model.named_parameters()
if any(nd in n for nd in no_decay) and p.requires_grad],
"weight_decay": 0}
]
02 model.train()指的是进入训练模式,会进行batch_norm进行归一化;model.eval()进入验证模式,还会计算导数,但是不会去更新;torch.no_grad()不会计算导数,可以加快计算速度和减少显存;model.backward(),进行反向传播;model.zero_grad()参数导数清0,optimizer.step()更新所有参数。
03 精确率指的是模型预测为真实际为真的部分与标签本身为真的部分和预测为真但是实际标签为假的部分和的比值;召回率为模型预测为真实际为真的部分与标签本身为真的部分和预测为假实际标签为真的和部分比值。F1_score为精确率和召回率而计算得到的,F1_score越高,说明模型的准确率越高。
本周的主要遇到的问题:
01 老师给的代码中的数据集belief_state部分,不知道如何生成的?而且在代码的预测和验证阶段,用到belief_state去计算了joint_goal的值不清楚,计算这个指标是为了什么。
02 对于argparse.ArgumentParser()这部分不太理解,不清楚其中具体的作用是什么,还需要继续去看。