1 Descripción del error
1.1 Entorno del sistema
Entorno de hardware (Ascend/GPU/CPU): Entorno de software Ascend : -- Versión de MindSpore (fuente o binario): 1.8.0 -- Versión de Python (p. ej., Python 3.7.5): 3.7.6 -- Plataforma y distribución del sistema operativo ( por ejemplo, Linux Ubuntu 16.04): Ubuntu 4.15.0-74-generic -- GCC/Versión del compilador (si se compila desde la fuente):
1.2 Información básica
1.2.1 Guión
El script de entrenamiento completa la operación de la capa de incrustación mediante la construcción de una red de incrustación de un solo operador. El guión es el siguiente:
01 class Net(nn.Cell):
02 def __init__(self, vocab_size, embedding_size, use_one_hot, padding_idx=None):
03 super(Net, self).__init__()
04 self.op = nn.Embedding(vocab_size=vocab_size, embedding_size=embedding_size, use_one_hot=use_one_hot, padding_idx=padding_idx)
05
06 def construct(self, x):
07 output = self.op(x)
08 return output
09
10 input = Tensor(np.ones([8, 128]), mindspore.int32)
11 vocab_size = 2000
12 embedding_size = 768
13 use_one_hot = True
14 example = Net(vocab_size=vocab_size, embedding_size=embedding_size, use_one_hot=use_one_hot, padding_idx=10000)
15 output = example(input)
16 print("Output: ", output.shape)
Copiar
1.2.2 Informe de errores
El mensaje de error aquí es el siguiente:
Traceback (most recent call last):
File "C:/Users/user1/PycharmProjects/q2_map/new/I3MRK3.py", line 26, in <module>
example = Net(vocab_size=vocab_size, embedding_size=embedding_size, use_one_hot=use_one_hot, padding_idx=10000)
File "C:/Users/user1/PycharmProjects/q2_map/new/I3MRK3.py", line 12, in __init__
self.op = nn.Embedding(vocab_size=vocab_size, embedding_size=embedding_size, use_one_hot=use_one_hot, padding_idx=padding_idx)
File "C:\Users\user1\PycharmProjects\q2_map\lib\site-packages\mindspore\nn\layer\embedding.py", line 111, in __init__
self.padding_idx = validator.check_int_range(padding_idx, 0, vocab_size, Rel.INC_BOTH,
File "C:\Users\user1\PycharmProjects\q2_map\lib\site-packages\mindspore\_checkparam.py", line 413, in check_int_range
return check_number_range(arg_value, lower_limit, upper_limit, rel, int, arg_name, prim_name)
File "C:\Users\user1\PycharmProjects\q2_map\lib\site-packages\mindspore\_checkparam.py", line 209, in check_number_range
raise ValueError("{} {} should be in range of {}, but got {} with type `{}`.".format(
ValueError: `padding_idx` in `Embedding` should be in range of [0, 2000), but got 10000 with type `int`.
Copiar
Análisis de causa
Observamos el mensaje de error, en ValueError, la escritura padding_idx
debe Embedding
estar en el rango de [0, 2000), pero obtuvo 10000 con el tipo int
., lo que significa que el valor de padding_idx' en el operador de incrustación debe estar entre 0 y 2000, pero tengo 10000. Combinado con la descripción del sitio web oficial del uso del operador Ebedding, se encuentra que padding_idx se ha definido claramente, y su valor debe estar entre 0 y vocab_size:
2 soluciones
En base a las razones conocidas anteriores, es fácil realizar las siguientes modificaciones:
01 class Net(nn.Cell):
02 def __init__(self, vocab_size, embedding_size, use_one_hot, padding_idx=None):
03 super(Net, self).__init__()
04 self.op = nn.Embedding(vocab_size=vocab_size, embedding_size=embedding_size, use_one_hot=use_one_hot, padding_idx=padding_idx)
05
06 def construct(self, x):
07 output = self.op(x)
08 return output
09
10 input = Tensor(np.ones([8, 128]), mindspore.int32)
11 vocab_size = 2000
12 embedding_size = 768
13 use_one_hot = True
14 example = Net(vocab_size=vocab_size, embedding_size=embedding_size, use_one_hot=use_one_hot, padding_idx=1000)
15 output = example(input)
16 print("Output: ", output.shape)
Copiar
En este momento, la ejecución es exitosa y el resultado es el siguiente:
Output: (8, 128, 768)
3 resumen
Pasos para localizar el problema de informe de errores:
1. Busque la línea de código de usuario que informó el error: ejemplo = Net(vocab_size=vocab_size, embedding_size=embedding_size, use_one_hot=use_one_hot, padding_idx=10000) ;
2. De acuerdo con las palabras clave en el mensaje de error de registro, reduzca el alcance del problema de análisis padding_idx
en Embedding
el rango de [0, 2000), pero obtuvo 10000 con el tipo int
.
4 Documentos de referencia
4.1 Incrustación de la interfaz API del operador