问题描述:
#!/usr/bin/python
import math
import mindspore as ms
from mindspore import ops
grad_all = ops.composite.GradOperation()
def func(x):
return math.exp(x)
def df_func(x):
return grad_all(func)(x)
@ms.ms_function
def df2_func(x):
return grad_all(df_func)(x)
if __name__ == "__main__":
print(df2_func(ms.Tensor(2, ms.float32)))
这段代码是从mindspore教程中摘录下来的
当 func 函数为 return x*x*x就没问题,改为exp(x)就运行不了,是怎么回事?
出错提示如下:
[ERROR] PIPELINE(3686,7fb05667a740,python3):2022-03-29-08:25:08.561.938 [mindspore/ccsrc/pipeline/jit/pipeline.cc:906] Compile]
# In file ./grad.py(12)
return math.exp(x)
^
Traceback (most recent call last):
File "./grad.py", line 22, in <module>
print(df2_func(ms.Tensor(2, ms.float32)))
File "/home/ych/.local/lib/python3.8/site-packages/mindspore/common/api.py", line 447, in staging_specialize
out = _MindsporeFunctionExecutor(func, ms_create_time, input_signature, process_obj)(*args)
File "/home/ych/.local/lib/python3.8/site-packages/mindspore/common/api.py", line 90, in wrapper
results = fn(*arg, **kwargs)
File "/home/ych/.local/lib/python3.8/site-packages/mindspore/common/api.py", line 358, in __call__
phase = self.compile(args_list, self.fn.__name__)
File "/home/ych/.local/lib/python3.8/site-packages/mindspore/common/api.py", line 326, in compile
is_compile = self._graph_executor.compile(self.fn, args_list, phase, True)
File "/home/ych/.local/lib/python3.8/site-packages/mindspore/_extends/parse/parser.py", line 230, in resolve_symbol
raise e
File "/home/ych/.local/lib/python3.8/site-packages/mindspore/_extends/parse/parser.py", line 227, in resolve_symbol
raise NotImplementedError(f"Not support for '{symbol}'.")
NotImplementedError: Not support for 'exp'.
解答:
您可以使用ops.Exp算子,尽量不要使用其他库函数操作Tensor,无法保证这个算子是支持输入Tensor的,mindspore提供了很多功能的算子,您可以https://www.mindspore.cn/docs/api/zh-CN/master/index.html查看。mindspore.ops.GradOperation的具体用法请参考官方文档,看您需要哪一种场景