MindSpore meldet einen Fehler. Für primitive[TensorSummary] muss der v-Rang größer oder gleich 0 sein

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.

4 Referenzdokumente

4.1  TensorSummary-Operator-API-Schnittstelle

Supongo que te gusta

Origin blog.csdn.net/beauty0220/article/details/129138907
Recomendado
Clasificación