版本 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提供了您所需要的学习率算法,可以抄过来改一行直接用