bottom_need_backward_和layer_need_backward_和blob_need_backward_

从前往后

bottom_need_backward_ = layer_param.propagate_down(bottom_id)
layer_need_backward_ = blob_need_backward_[blob_id]
blob_need_backward_[top_id_vecs_[layer_id][top_id]] = layer_need_backward_

在这里插入图片描述
1.只要bottom中有一个需要backward,则整个layer需要backward;
2.只要layer需要backward,则layer的所有top都需要backward;

从后往前

1.如果layer的所有top都不需要backward,则整个layer和layer所有的bottom都不需要backward

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个代码是 PaddleNLP 中的一个模型 Fine-tuning 的示例,用于在 UIE(User Intention Extraction)任务上 Fine-tuning 预训练好的 ERNIE-Gram 模型。 以下是代码的主要部分解析: ```python from paddlenlp.transformers import ErnieGramForSequenceClassification, ErnieGramTokenizer import paddle # 加载预训练模型和分词器 model = ErnieGramForSequenceClassification.from_pretrained('ernie-gram-zh') tokenizer = ErnieGramTokenizer.from_pretrained('ernie-gram-zh') # 加载数据 train_ds, dev_ds, test_ds = load_dataset(datafiles) # 定义数据处理函数 def convert_example(example, tokenizer, max_seq_length=512): query, title, label = example['query'], example['title'], example['label'] encoded_inputs = tokenizer(query, title, max_seq_len=max_seq_length, pad_to_max_seq_len=True) input_ids = encoded_inputs['input_ids'] token_type_ids = encoded_inputs['token_type_ids'] attention_mask = encoded_inputs['attention_mask'] return input_ids, token_type_ids, attention_mask, label # 定义数据读取器 train_data_loader = paddle.io.DataLoader(train_ds.map(lambda x: convert_example(x, tokenizer)), batch_size=batch_size, num_workers=num_workers, shuffle=True) dev_data_loader = paddle.io.DataLoader(dev_ds.map(lambda x: convert_example(x, tokenizer)), batch_size=batch_size, num_workers=num_workers, shuffle=False) test_data_loader = paddle.io.DataLoader(test_ds.map(lambda x: convert_example(x, tokenizer)), batch_size=batch_size, num_workers=num_workers, shuffle=False) # 定义优化器和损失函数 optimizer = paddle.optimizer.AdamW(learning_rate=lr, parameters=model.parameters()) criterion = paddle.nn.loss.CrossEntropyLoss() # Fine-tuning for epoch in range(epochs): for input_ids, token_type_ids, attention_mask, labels in train_data_loader: logits = model(input_ids, token_type_ids, attention_mask) loss = criterion(logits, labels) loss.backward() optimizer.step() optimizer.clear_grad() ``` 首先,通过 PaddleNLP 中的 `ErnieGramForSequenceClassification` 和 `ErnieGramTokenizer` 加载预训练模型和分词器。 然后,通过 `load_dataset` 函数加载数据集,并定义 `convert_example` 函数将数据转化为模型需要的格式,包括输入的 `input_ids`、`token_type_ids` 和 `attention_mask` 以及标签 `label`。 接着,通过 `DataLoader` 定义数据读取器,将数据输入模型进行 Fine-tuning。 最后,定义优化器和损失函数,使用 `backward` 计算梯度并更新模型参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值