mindspore 记录和打印 动态学习率

在MindSpore中,当使用自定义的TrainOneStepCell时,Model无法正确识别优化器,导致callback无法获取optimizer。同时,`self.optimizer.get_lr()`不适用于实时获取学习率。建议通过继承优化器或LearningRateSchedule来定制并打印学习率。
摘要由CSDN通过智能技术生成

版本 ms 1.10.1

1 在callback的 cb_params=run_context.original_args()

cb_params.optimizer 返回值为None

2.在继承的TrainOneStepCell类的construct函数中调用

self.optimizer.get_lr()

返回值一直为0

****************************************************解答*****************************************************

1、使用Model时,如果传了optimizer,callback中才会记录;

     从目前给出的信息看,是自己封装了TrainOneStepCell,直接整训练网传给Model的,这种情况下Model无法辨别哪部分结构是优化器;后续会考虑优化,尝试从TrainOneStepCell中尝试获取optimizer属性,作为优化器记录

2、self.optimizer.get_lr() 是优化器运行期获取学习率的,主要用在优化器内部;

通过该接口无法实时获取当前学习率;

暂时没有直接获取实时学习率的接口,您可以考虑以下方式:

方案一:继承您使用的优化器,然后重写get_lr

``` 

class MyAdam(nn.Adam): 

    def get_lr(self): 

        lr = self.learning_rate 

        if self.dynamic_lr: 

            if self.is_group_lr: 

                lr = () 

                for learning_rate in self.learning_rate: 

                    current_dynamic_lr = learning_rate(self.global_step).reshape(()) 

                    lr += (current_dynamic_lr,) 

            else: 

                lr = self.learning_rate(self.global_step).reshape(()) 

                # print lr in here 

        if self._is_dynamic_lr_or_weight_decay(): 

            self.assignadd(self.global_step, self.global_step_increase_tensor) 

        return lr 

``` 

方案二: 继承nn.LearningRateSchedule自定义学习率,并在这里实时打印,该方式下,学习率是在运行期计算并传给优化器的

```

class MyLR(nn.LearningRateSchedule): 

    def __init__(): 

 

    def construct(self, global_step): 

        # calculate lr 

        # print lr 

        retrn lr 

```

当然,如果mindspore提供了您所需要的学习率算法,可以抄过来改一行直接用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值