权重参数中的adam_v,adam_m,lamb_m,lamb_v等一系列参数的讲解

今天加载了一下对应的nezha模型的权重内容,发现对应的权重名称之中,出现了如下的一些权重名称
‘bert/encoder/layer_3/attention/output/dense/bias/lamb_v’
‘bert/encoder/layer_1/attention/output/LayerNorm/beta/lamb_m’
‘bert/pooler/dense/bias/lamb_v’
‘bert/embeddings/word_embeddings/lamb_v’
等内容,阅读transformer的加载源码之中,有这样的一段注释:

for name, array in zip(names, arrays):
    name = name.split("/")
    # adam_v and adam_m are variables used in AdamWeightDecayOptimizer to calculated m and v
    # which are not required for using pretrained model
    if any(
            n in ["adam_v", "adam_m", "lamb_m", "lamb_v", "AdamWeightDecayOptimizer", "AdamWeightDecayOptimizer_1",
                  "global_step", "good_steps", "loss_scale", 'bad_steps']
            for n in name
    ):
        logger.info("Skipping {}".format("/".join(name)))
        continue

可以看出注释的意思是在加载出对应的权重内容之后,如果权重之中带有"adam_v",“adam_m”,“lamb_m”,"lamb_v"的后缀内容的时候,就不需要加载对应的权重值,这里的原因我们通过举adam优化器的例子为例,来说明这些权重的作用
adam优化器的对应公式:
adam优化器的对应公式可以看出公式中有对应的 m t m_{t} mt v t v_{t} vt,而这些正是后缀为\adam_v,\adam_w的权重的作用,通过前一轮的权重内容去计算后一轮的权重内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DA.LAMB_DA是域自适应的一种方法,用于在源域和目标域之间进行特征对齐。在代码,通常会使用两个数据集,一个作为源域数据集,一个作为目标域数据集。在源域上训练的模型可能无法在目标域上表现良好,因为源域和目标域之间存在分布偏移。这时,我们可以使用DA.LAMB_DA方法来对目标域的特征进行对齐。 具体使用方法如下: 1. 首先,我们需要定义一个域自适应的模型,例如DANN模型。 2. 在模型的训练过程,我们需要使用DA.LAMB_DA方法来对目标域的特征进行对齐。具体来说,我们需要在模型的loss函数添加一个DA.LAMB_DA损失项。 3. DA.LAMB_DA方法需要计算源域和目标域之间的距离矩阵。在代码,我们可以使用scipy.spatial.distance.cdist函数来计算距离矩阵。 4. 最后,我们需要对模型进行训练。在每个epoch结束后,我们需要计算模型在源域和目标域上的分类准确率,并输出结果。 下面是一个伪代码示例: ```python # 定义一个域自适应的模型 model = DANN() # 在模型的loss函数添加一个DA.LAMB_DA损失项 def loss_fn(source_data, target_data, source_labels, target_labels): loss_source = cross_entropy(model(source_data), source_labels) loss_target = cross_entropy(model(target_data), target_labels) loss_da = DA.LAMB_DA(source_data, target_data) return loss_source + loss_target + loss_da # 计算源域和目标域之间的距离矩阵 distance_matrix = scipy.spatial.distance.cdist(source_features, target_features) # 训练模型 for epoch in range(num_epochs): train(model, optimizer, loss_fn, source_data, target_data, source_labels, target_labels) acc_source = evaluate(model, source_data, source_labels) acc_target = evaluate(model, target_data, target_labels) print("Epoch {}/{}: source_acc = {:.3f}, target_acc = {:.3f}".format(epoch+1, num_epochs, acc_source, acc_target)) ``` 注意:这只是一个简单的伪代码示例,实际的代码实现可能会更加复杂。另外,DA.LAMB_DA方法还有其他的参数和超参数,需要根据具体情况进行设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值