1 Description de l'erreur
1.1 Environnement système
Environnement matériel (Ascend/GPU/CPU) : Environnement logiciel GPU : -- Version MindSpore (source ou binaire) : 1.5.2 -- Version Python (par exemple, Python 3.7.5) : 3.7.6 -- Plate-forme et distribution du système d'exploitation ( par exemple, Linux Ubuntu 16.04): Ubuntu 4.15.0-74-generic -- version GCC/Compiler (si compilé à partir de la source):
1.2 Informations de base
1.2.1 Scénario
Le script d'entraînement consiste à calculer la valeur minimale de l'élément correspondant du tenseur d'entrée en construisant un réseau mono-opérateur minimum. Le script est le suivant :
01 class Net(nn.Cell):
02 def __init__(self):
03 super(Net, self).__init__()
04 self.minimum = ops.minumum()
05 def construct(self, x,y):
06 output = self.minimum(x, y)
07 return output
08 net = Net()
09 x = Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float64) .astype(mindspore.float32)
10 y = Tensor(np.array([3.0, 5.0, 6.0]), mindspore.float64) .astype(mindspore.float32)
11 output = net(x, y)
12 print('output', output)
copie
1.2.2 Rapport d'erreur
Le message d'erreur ici est le suivant :
[EXCEPTION] PYNATIVE(95109,7fe22ea22740,python):2022-06-14-21:59:02.837.339 [mindspore/ccsrc/pipeline/pynative/pynative_execute.cc:1331] SetImplicitCast] Minimum inputs size 0 does not match the requires signature size 2
Traceback (most recent call last):
File "182168.py", line 36, in <module>
net = Net()
File "182168.py", line 24, in __init__
self.minimum = ops.minimum()
File "/data2/llj/mindspores/r1.5/build/package/mindspore/ops/primitive.py", line 247, in __call__
return _run_op(self, self.name, args)
File "/data2/llj/mindspores/r1.5/build/package/mindspore/common/api.py", line 78, in wrapper
results = fn(*arg, **kwargs)
File "/data2/llj/mindspores/r1.5/build/package/mindspore/ops/primitive.py", line 682, in _run_op
output = real_run_op(obj, op_name, args)
ValueError: mindspore/ccsrc/pipeline/pynative/pynative_execute.cc:1331 SetImplicitCast] Minimum inputs size 0 does not match the requires signature size 2
copie
Analyse des causes
Nous lisons le message d'erreur.Dans ValueError, il est indiqué que la taille minimale des entrées 0 ne correspond pas à la taille de signature requise 2, ce qui signifie probablement que deux entrées sont requises, mais il n'y a pas d'entrée réelle. Combiné avec la ligne 11, on constate que deux entrées sont en fait transmises. Ainsi, le problème n'est peut-être pas dans cette ligne, nous pouvons ajouter une marque d'impression après les lignes 3, 5 et 11 pour voir où le programme a été exécuté. Après exécution, on constate que seul 1 est imprimé, indiquant que le problème réside dans la quatrième ligne. Après une inspection minutieuse, on constate que le minimum utilisé dans la quatrième ligne lors de l'initialisation de l'opérateur Minimum est en minuscule, ce qui équivaut à appelant directement l'opérateur minimum de l'interface fonctionnelle, l'erreur n'est donc pas transmise.
2 solutions
Sur la base des raisons connues ci-dessus, il est facile d'apporter les modifications suivantes :
01 class Net(nn.Cell):
02 def __init__(self):
03 super(Net, self).__init__()
04 self.minimum = ops.Minimum()
05 def construct(self, x,y):
06 output = self.minimum(x, y)
07 return output
08 net = Net()
09 x = Tensor(np.array([1.0, 2.0, 4.0]), mindspore.float64) .astype(mindspore.float32)
10 y = Tensor(np.array([3.0, 5.0, 6.0]), mindspore.float64) .astype(mindspore.float32)
11 output = net(x, y)
12 print('output', output)
copie
À ce stade, l'exécution est réussie et le résultat est le suivant :
output [1. 2. 3.]
3 Résumé
Étapes pour localiser le problème de rapport d'erreur :
1. Recherchez la ligne de code utilisateur qui a signalé l'erreur : self.minimum = ops.minimum() ;
2. Selon les mots-clés du message d'erreur du journal, réduisez la portée du problème d'analyse La taille minimale des entrées 0 ne correspond pas à la taille de signature requise 2 ;
3. Il est nécessaire de se concentrer sur l'exactitude de la définition et de l'initialisation des variables.