迁移网络时转化为静态图的时候报错

1.系统环境

硬件环境(Ascend/GPU/CPU): GPU
MindSpore版本: mindspore=2.0
执行模式(PyNative/ Graph):不限
Python版本:3.7
操作系统平台:Linux

2. 问题描述

迁移网络时转化为静态图的时候报错

3. 原因分析

此问题原因在于当前mindspore在静态图语法的限制,对于cell类的成员属性self._cache,是一个dict,当前暂时不支持在construct里面对其进行修改操作。
源代码:

def cached_grid_anchors(self, grid_sizes, strides):  
    # type: (List[List[int]], List[List[Tensor]]) -> List[Tensor]  
    """将计算得到的所有anchors信息进行缓存"""  
    key = str(grid_sizes) + str(strides)  
    # self._cache是字典类型  
    if key in self._cache:  
        return self._cache[key]  
    anchors = self.grid_anchors(grid_sizes, strides)  
    self._cache[key] = anchors  
    return anchors

4. 解决方案

只有在函数cached_grid_anchors使用了该成员属性,修改为self._cache作为临时变量:

def cached_grid_anchors(self, grid_sizes, strides):  
    # type: (List[List[int]], List[List[Tensor]]) -> List[Tensor]  
    """将计算得到的所有anchors信息进行缓存"""  
    key = str(grid_sizes) + str(strides)  
    # self._cache是字典类型  
    cache_dict = {}  
    if key in cache_dict:  
        return cache_dict[key]  
    anchors = self.grid_anchors(grid_sizes, strides)  
    cache_dict[key] = anchors  
    return anchors