MindSpore报错TypeError: __init__() missing 2 required positional arguments: 'vocab_size' and 'embedding_size'

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)