1 系统环境
硬件环境(Ascend/GPU/CPU): GPU/CPU
MindSpore版本: mindspore=2.2.0
执行模式(PyNative/ Graph):不限
Python版本: Python=3.9
操作系统平台: 不限
2 报错信息
2.1 问题描述
将pytorch框架的代码转换为mindspore报错。
2.2 代码信息
PyTorch
input_data = self.embedding(input_data)
MindSpore
net = nn.Embedding()
input_data = net(input_data)
2.2 报错信息
TypeError: __init__() missing 2 required positional arguments: 'vocab_size' and 'embedding_size'
3 根因分析
首先看torch的API
# an Embedding module containing 10 tensors of size 3
embedding = nn.Embedding(10, 3)
# a batch of 2 samples of 4 indices each
input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]])
embedding(input)
上面torch代码的self.embedding 应该也是定义了 num_embeddings , embedding_dim
再看mindspore API
示例代码:
import mindspore
from mindspore import Tensor, nn
import numpy as np
net = nn.Embedding(20000, 768, True)
x = Tensor(np.ones([8, 128]), mindspore.int32)
# Maps the input word IDs to word embedding.
output = net(x)
result = output.shape
print(result)
class mindspore.nn.Embedding(vocab_size , embedding_size , use_one_hot=False , embedding_table=‘normal’ , dtype=mstype.float32 , padding_idx=None)
- vocab_size (int) - 词典的大小。
- embedding_size (int) - 每个嵌入向量的大小。
这两个参数的必选的,分别对应torch的 num_embeddings , embedding_dim
4 解决方案
定义net = nn.Embedding() 的时候提供 vocab_size , embedding_size这两个参数即可
net = nn.Embedding(20000,100)
input_data = net(input_data)