赋值全局变量的变量会随之变化

该代码段实现了一个功能,用于在训练过程中保存具有最佳性能的模型。它比较当前测试集上的自然语言任务(nat)和对抗性任务(adv)的正确率,并更新最佳模型的状态字典及对应的epoch。由于model是全局变量,其参数在epoch间持续更新,导致best_adv_model和best_nat_model也随model参数变化,而非保持最优状态。
def save_baet_model(test_nat_correct, test_adv_correct,
                    best_nat_correct, best_adv_correct,
                    best_nat_model, best_adv_model,
                    best_nat_epoch, best_adv_epoch,
                    model, epoch):
    if test_nat_correct > best_nat_correct:
        best_nat_correct = test_nat_correct
        best_nat_model = model.module.state_dict()
        best_nat_epoch = epoch
    if test_adv_correct > best_adv_correct:
        best_adv_correct = test_adv_correct
        best_adv_model = model.module.state_dict()
        best_adv_epoch = epoch
    return best_nat_correct, best_adv_correct, best_nat_epoch, best_adv_epoch, best_nat_model, best_adv_model

运行后随着epoch的增加,model的参数也会更新,相应的影响了best_adv_model、best_nat_model,因为model不是局部变量,没有随着子函数的结束而取消内存分配,重分配地址,导致变量一直指向这个变化的变量(python基础都忘了唉)

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值