1 Fehlerbeschreibung
1.1 Systemumgebung
Hardwareumgebung (Ascend/GPU/CPU): Ascend Softwareumgebung: – MindSpore-Version (Quelle oder Binär): 1.8.0 – Python-Version (z. B. Python 3.7.5): 3.7.6 – Betriebssystemplattform und -verteilung ( z. B. Linux Ubuntu 16.04): Ubuntu 4.15.0-74-generic – GCC/Compiler-Version (falls aus dem Quellcode kompiliert):
1.2 Grundlegende Informationen
1.2.1 Skript
Das Trainingsskript besteht darin, ein einfaches Operatornetzwerk zu erstellen, eine Additionsoperation für zwei Eingabetensoren durchzuführen und dann die Tensorzusammenfassung aufzurufen. Das Skript lautet wie folgt:
01 class SummaryNet(nn.Cell):
02 def __init__(self,):
03 super(SummaryNet, self).__init__()
04 self.summary = ops.TensorSummary()
05 self.add = ops.Add()
06
07 def construct(self, x, y):
08 x = self.add(x, y)
09 name = "x"
10 self.summary(name, x.sum())
11 return x
12
13 x = Tensor(np.array([1, 2, 3]).astype(np.float32))
14 y = Tensor(np.array([4, 5, 6]).astype(np.float32))
15 summary_net = SummaryNet()(x, y)
16 print("out: ", summary_net)
Kopieren
1.2.2 Fehlerberichterstattung
Die Fehlermeldung hier lautet wie folgt:
Traceback (most recent call last):
File "C:/Users/user1/PycharmProjects/q2_map/new/173735.py", line 22, in <module>
summary_net = SummaryNet()(x, y)
File "C:\Users\user1\PycharmProjects\q2_map\lib\site-packages\mindspore\nn\cell.py", line 586, in __call__
out = self.compile_and_run(*args)
File "C:\Users\user1\PycharmProjects\q2_map\lib\site-packages\mindspore\nn\cell.py", line 964, in compile_and_run
self.compile(*inputs)
File "C:\Users\user1\PycharmProjects\q2_map\lib\site-packages\mindspore\nn\cell.py", line 937, in compile
_cell_graph_executor.compile(self, *inputs, phase=self.phase, auto_parallel_mode=self._auto_parallel_mode)
File "C:\Users\user1\PycharmProjects\q2_map\lib\site-packages\mindspore\common\api.py", line 1006, in compile
result = self._graph_executor.compile(obj, args_list, phase, self._use_vm_mode())
ValueError: mindspore\core\utils\check_convert_utils.cc:397 CheckInteger] For primitive[TensorSummary], the v rank must be greater than or equal to 1, but got 0.
WARNING: Logging before InitGoogleLogging() is written to STDERR
[CRITICAL] CORE(6472,1,?):2022-6-17 15:47:53 [mindspore\core\utils\check_convert_utils.cc:397] CheckInteger] For primitive[TensorSummary], the v rank must be greater than or equal to 1, but got 0.
Kopieren
Ursachenanalyse
Wir lesen die Fehlermeldung, in ValueError schreiben wir ValueError: Für primitive[TensorSummary] muss der v-Rang größer oder gleich 1 sein, hat aber 0. Das bedeutet, dass für TensorSummary der Rang des Parameters v größer als oder sein muss gleich 1, aber ich habe 0 erhalten. Daher muss überprüft werden, ob der an TensorSummary übergebene Rang von v den Anforderungen entspricht. Beim Überprüfen der achten Zeile des Skripts wird festgestellt, dass x und y summiert werden und das Ergebnis ein Skalar (Konstante) ist, sodass ein Fehler gemeldet wird. In Bezug auf TensorSummary wurden auf der offiziellen Website Eingabebeschränkungen vorgenommen, und der Rang des Eingabetensors muss größer oder gleich 1 sein. Wenn Sie Skalardaten erfassen müssen, können Sie den ScalarSummary-Operator verwenden.
2 Lösungen
Aus den oben genannten bekannten Gründen ist es einfach, die folgenden Änderungen vorzunehmen:
01 class SummaryNet(nn.Cell):
02 def __init__(self,):
03 super(SummaryNet, self).__init__()
04 self.summary = ops.ScalarSummary()
05 self.add = ops.Add()
06
07 def construct(self, x, y):
08 x = self.add(x, y)
09 name = "x"
10 self.summary(name, x.sum())
11 return x
12
13 x = Tensor(np.array([1, 2, 3]).astype(np.float32))
14 y = Tensor(np.array([4, 5, 6]).astype(np.float32))
15 summary_net = SummaryNet()(x, y)
16 print("out: ", summary_net)
Kopieren
Zu diesem Zeitpunkt ist die Ausführung erfolgreich und die Ausgabe lautet wie folgt:
out: [5. 7. 9.]
3 Zusammenfassung
Schritte zum Lokalisieren des Fehlerberichtsproblems:
1. Suchen Sie die Benutzercodezeile, die den Fehler gemeldet hat: * summary_net = SummaryNet()(x, y)*;
2. Schränken Sie gemäß den Schlüsselwörtern in der Protokollfehlermeldung den Umfang des Analyseproblems ein* Für primitiv[TensorSummary] muss der v-Rang größer oder gleich 1 sein, hat aber 0.* ;
3. Es ist notwendig, sich auf die Richtigkeit der Variablendefinition und -initialisierung zu konzentrieren.