# 使用MindSpore报错TypeError:Invalid dtype

**1. 系统环境**

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

软件环境: MindSpore 版本: 2.2.0

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

Python 版本: 3.7.6

操作系统平台: linux

**2. 报错信息**

2.1 问题描述

在将Torch的代码转换为MindSpore时，遇到如下代码：

```
input_data = self.embedding(input_data)
```

其中input\_data为int64类型，Torch的embedding能够处理。

使用MindSpore替换时出现报错，代码如下。

```
net = nn.Embedding(vocab_size=self.hidden_size, embedding_size=self.embedding_size,dtype=ms.int64)
input_data = net(input_data)
```

使用AutoDL进行debug的时候，发现定义出来的net的dtype仍为float32，导致了类型错误。

2.2 报错信息

```
(embedding) : Embedding<vocab_size=110, embedding_size=8, use_one_hot=False, embedding table=Parameter (name=embedding. embedding table, shape=(110, 8), dtype=Float32, requires_grad=True), dtype=Float32, padding_idx=None>
```

**3. 根因分析**

使用MindSpore版本2.2.0中会默认更改格式。

**4. 解决方案**

使用2.3版本下的mindspore测试，设置了int64后，算子里不会默认更改。

```
import mindspore as ms
from mindspore import Tensor, nn, context
import numpy as np

context.set_context(device_target='CPU')
net = nn.Embedding(110, 8, dtype=ms.int64)
x = Tensor(np.array([[107]*50]),ms.int64)

print(x)
output = net(x)
print(net)
print(output.shape)
```

