# \[MindSpore报错ValueError: x rank in NLLLoss should be int and must in \[1, 2\], but got 4 with type \`int\]

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend/GPU/CPU

软件环境: MindSpore 版本: 1.6.0

执行模式（静态图/动态图）： 不限

Python 版本: 3.7.6

操作系统平台: linux

**2. 报错信息**

2.1 问题描述

根据标杆torch算子NLLLoss的用例，编写输入为\(N, C, d1, d2\)的用例，脚本如下：

2.2 报错信息

```
 01 loss = nn.NLLLoss()
 02 input = torch.randn(5, 4, 8, 8)
 03 m = nn.LogSoftmax(dim=1)
 04 target = torch.empty(5, 8, 8, dtype=torch.long).random_(0, 4)
 05 loss = loss(m(input), target)
 06 print('torch_loss',loss)
 07
 08 m = mn.LogSoftmax(axis=1)
 09 loss = ops.NLLLoss()
 10 input = Tensor(np.random.randn(5, 4,8,8), mindspore.float32)
 11 labels = Tensor([1, 0,1, 1], mindspore.int32)
 12 weight = Tensor(np.random.rand(5,8,8), mindspore.float32)
 13 loss, weight = loss(m(input), labels, weight)
 14 print('mindspore_loss:',loss)
```

2.3 脚本信息

```
Traceback (most recent call last):
 File demo.py, line 13, in &lt;module&gt;
    loss, weight = loss(m(input), labels, weight)
…
File &quot;/lib/python3.7/site-packages/mindspore/_checkparam.py&quot;, line 238, in check_int
  return check_number(arg_value, value, rel, int, arg_name, prim_name)
 File &quot; /lib/python3.7/site-packages/mindspore/_checkparam.py&quot;, line 168, in check_number
  raise type_except(f'{prim_info} should be {arg_type.__name__} and must {rel_str}, '
ValueError: `x rank` in `NLLLoss` should be int and must in [1, 2], but got `4` with type `int
```

**3. 根因分析**

在MindSpore 1.6版本，利用对标算子的用例编写输入为\(N, C, d1, d2\)的用例。先看报错信息，在ValueError中，写到x rank in NLLLos should be int and must in \[1, 2\], but got 4 with type int，意思是传的NLLLoss的x\_rank参数应该为int，而且应该在\[1, 2\]之间，但是你传进去的是int类型的4，由报错行数line13，检查传入数据可知我们传入了为4维的\(5, 4, 8, 8\)，而torch传入该类型数据能支持，这是由于目前MindSpore暂不支持\(N,C,d1,d2,...,dK\) with K≥1类型，这点在旧版本的PyTorch与MindSpore API映射对比中描述为功能一致，此处文档有误\(见下图\)，目前标杆算子和MindSpore框架支持的NLLLoss算子功能存在一定差异，MindSpore目前只支持 shape为\(N,C\)的数据\(如下图所示\)。

![](figures/zh-cn_image_0000002107421848.png)

在新版本中的描述中已经进行修改。参考链接为：https://www.mindspore.cn/docs/migration\_guide/zh-CN/r1.5/api\_mapping/pytorch\_diff/NLLLoss.html 。

**4. 解决方案**

基于上面已知的原因，该算子存在部分输入不支持的情况，目前需要用户自己封装。

