作者:烟花宇凉 | 来源:互联网 | 2023-10-13 14:03
1、调用网络时提示已有'weight'命名,但模型中并没有定义任何命名为weight的变量或参数。
【日志信息】(可选,上传日志内容或者附件)
[CRITICAL] PARSER(2137855,7f5ee900e740,python):2022-06-24-18:55:49.541.682 [mindspore/ccsrc/pipeline/jit/parse/resolve.cc:158] ResolveParameterObj] The parameter construct_wrapper.1:weight , its name 'weight' already exists. Please set a unique name for the parameter.
Traceback (most recent call last):
File "train.py", line 55, in
out = network((content, style))
File "/home/ais/miniconda3/envs/mindspore/lib/python3.7/site-packages/mindspore/nn/cell.py", line 586, in __call__
out = self.compile_and_run(*args)
File "/home/ais/miniconda3/envs/mindspore/lib/python3.7/site-packages/mindspore/nn/cell.py", line 964, in compile_and_run
self.compile(*inputs)
File "/home/ais/miniconda3/envs/mindspore/lib/python3.7/site-packages/mindspore/nn/cell.py", line 937, in compile
_cell_graph_executor.compile(self, *inputs, phase=self.phase, auto_parallel_mode=self._auto_parallel_mode)
File "/home/ais/miniconda3/envs/mindspore/lib/python3.7/site-packages/mindspore/common/api.py", line 1006, in compile
result = self._graph_executor.compile(obj, args_list, phase, self._use_vm_mode())
RuntimeError: mindspore/ccsrc/pipeline/jit/parse/resolve.cc:158 ResolveParameterObj] The parameter construct_wrapper.1:weight , its name 'weight' already exists. Please set a unique name for the parameter.
# In file /home/ais/miniconda3/envs/mindspore/lib/python3.7/site-packages/mindspore/nn/layer/conv.py(285)
output = self.conv2d(x, self.weight)
^
这类问题通常出现在图模式下,由于图模式下MindIR导入导出和副作用等原因,限制图模式下要求Parameter的name是要唯一。
可以从两个方面排查:
1) 是否代码中手写了同名的Parameter。例如:
class ParamNet(Cell):def __init__(self):super(ParamNet, self).__init__()self.param_a = Parameter(Tensor([1], ms.float32), name="name_a")self.param_b = Parameter(Tensor([2], ms.float32), name="name_a")def construct(self):return self.param_a + self.param_b
对于这种情况,可以通过手动修改同名的Parameter解决。
2) 是否在同一个Cell中使用了两个或者多个相同的网络实例。例如:
policy_net = FullyConnectedNet(4, 100, 2)target_net = FullyConnectedNet(4, 100, 2)self.policy_param = ParameterTuple(policy_net.get_parameters())self.target_param = ParameterTuple(target_net.get_parameters())
对于这种情况,可以通过CellList来管理,从而规避多个 Cell 间的同名 Parameter。
policy_net = FullyConnectedNet(4, 100, 2)
target_net = FullyConnectedNet(4, 100, 2)
self.cell_list = nn.CellList()
self.cell_list.append(policy_net)
self.cell_list.append(target_net)
self.policy_param = ParameterTuple(self.cell_list[0].get_parameters())
self.target_param = ParameterTuple(self.cell_list[1].get_parameters())