name | about | labels |
---|---|---|
Bug Report | Use this template for reporting a bug | kind/bug |
I once reproduced a bug in Pytroch, and when I converted the Pytroch method to the mindspore method, I found that the problem still existed. This problem was identified as a bug in Pytroch.
I get unstable results when sin, arcsin, arccos are called sequentially. sin followed by arcsin should give by the same value, however the calculation is not exactly the same and we get unstable results after arccos: 0.00034527 on CPU and nan on GPU.
Ascend
/GPU
/CPU
) / 硬件环境:Please delete the backend not involved / 请删除不涉及的后端:
/device GPU/CPU
Software Environment / 软件环境 (Mandatory / 必填):
-- MindSpore version (e.g., 1.7.0.Bxxx) : 2.2.13
-- Python version (e.g., Python 3.7.5) : 3.8.10
-- OS platform and distribution (e.g., Linux Ubuntu 16.04): Linux Ubuntu 22.04
-- GCC/Compiler version (if compiled from source): 7.5.0
Excute Mode / 执行模式 (Mandatory / 必填)(PyNative
/Graph
):
Please delete the mode not involved / 请删除不涉及的模式:
/mode pynative
/mode graph
from mindspore import set_context
import mindspore.ops as ops
set_context(device_target="CPU")
x = ops.ones(2)
y = ops.sin(x)
y = ops.arcsin(y)
y = ops.arccos(y)
print(y) # gives [0.00034527 0.00034527]
set_context(device_target="GPU")
y1 = ops.sin(x)
y1 = ops.arcsin(y1)
y1 = ops.arccos(y1)
print(y1) # gives [nan nan] should be [0,0]
[0,0]
Please assign maintainer to check this issue.
请为此issue分配处理人。
@fangwenyi @chengxiaoli @Shawny
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
感谢您的提问,您可以评论//mindspore-assistant更快获取帮助:
Relevant information visible at https://github.com/mindspore-ai/mindspore/issues/272
@Redempt1onzzZZ
Thanks for your report, I don't think it's a problem in mindspore.
I suggest you replace float32 dtype with float64 dtype and the problem will be solved.
This is the result of float64:
I analyzed the root cause of the problem: The precision of float32 affects the calculation result.
when your input dtype is float32,
step1: sin([1., 1.]) output is [0.841471 0.841471], there's a reasonable floating point error here(If you use a higher precision type float64, the output is [0.84147098 0.84147098]).
You can also use a high-precision calculator to verify:
step2: arcsin([0.841471 0.841471]) output is [1.0000001 1.0000001]. The calculation result of step2 is > 1 due to step1 reasonable error.
setp3: arccos([1.0000001 1.0000001]) output is [nan nan]. When arccos input > 1, return 'nan' is correct.
Thank you for your reply!
您好,由于问题单没有回复,我们后续会关闭,如您仍有疑问,可以反馈下具体信息,并将ISSUE状态修改为WIP,我们这边会进一步跟踪,谢谢
您好,由于问题单没有回复,我们后续会关闭,如您仍有疑问,可以反馈下具体信息,并将ISSUE状态修改为WIP,我们这边会进一步跟踪,谢谢
登录 后才可以发表评论