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
