Tensoroperationen gleichen äquivalente Formen und leere Tensoren an

Ab .NET 11 verwenden Tensorvorgänge konsistente Shape-Ausrichtungsregeln. Leere Standard-Tensoren für Rang null und Spans weisen bei Berechnungen eine effektive Form von [0] auf, und Vorgänge können redundante führende Singletonabmessungen ignorieren, wenn sie Shapes ausrichten.

Die Änderung wird im Paket System.Numerics.Tensors bereitgestellt, einschließlich der unterstützten Zielframeworks. Das Aktualisieren des Pakets kann sich auf Apps auswirken, die auf frühere .NET Versionen abzielen.

Eingeführt in Version

.NET 11

Bisheriges Verhalten

Tensorvorgänge verarbeiteten Shapes inkonsistent. Einige Vorgänge erforderten genaue Shape-Übereinstimmungen, während andere die Dimensionen unterschiedlich ausrichteten. Daher könnten gleichwertige Shapes mit redundanten führenden Singletonabmessungen, wie [1, 1, 3] und [3], bei Vorgängen unterschiedlich abgelehnt oder interpretiert werden.

Standardmäßige leere Tensoren und Spans behielten Rang-Null-Metadaten bei, Vorgänge behandelten sie jedoch nicht konsistent als Vektoren mit einer effektiven Form von [0]. Stapel- und Verkettenvorgänge können auch eine Achse je nach den Rängen der Eingaben unterschiedlich interpretieren.

Bei einigen Vorgängen wurden auch logische Elementanzahlen oder Offsets auf int eingegrenzt, was verhinderte, dass nativ gestützte Tensor-Spans mit mehr als int.MaxValue Elementen nicht korrekt durchlaufen werden konnten. Die Vorgänge EqualsAny, GreaterThanAny, GreaterThanOrEqualAny, LessThanOrEqualAny und LessThanAny überprüften nicht konsistent die vollständige logische Eingabelänge, auch bei leeren Eingaben.

Neues Verhalten

Tensorvorgänge verwenden jetzt gemeinsame Shape-Ausrichtungsregeln:

  • Standard-leere Tensoren der Rangfolge null und Spans haben für Berechnungen eine effektive Form von [0]. Ihre gespeicherten Rank, Lengths und Strides ändern sich nicht, und explizit eingestufte leere Shapes behalten ihre Abmessungen bei.
  • Vorgänge können redundante führende Singleton-Dimensionen hinzufügen oder entfernen, wenn sie Shapes ausrichten. Zum Beispiel stimmt [1, 1, 3] mit [3] überein, aber [1, 2] und [2, 1] bleiben getrennt. Abmessungen der Länge Null und nicht führende Singletonabmessungen bleiben von Bedeutung.
  • Die Shape-Gleichheit ignoriert nur redundante führende Singletonabmessungen. Es überträgt keine anderen Dimensionen.
  • Stapel- und Verkettenvorgänge interpretieren die Achse mithilfe des effektiven Shapes der ersten Eingabe. Andere Eingaben und Ziele richten sich nach dieser Form.
  • Leere Standardwerte können an [2, 0] übertragen werden. Eine binäre Operation zwischen effektiven Formen [0] und [0, 2] weist die inkompatiblen nachgestellten Dimensionen zurück.
  • Quellen und Ziele behalten ihre angeforderten Shape-Metadaten bei, wenn Operationen sie aneinander ausrichten.

Nativ gestützte Tensor-Spans können jetzt mit nativen Längen und Offsets durchlaufen werden, einschließlich Spans mit mehr als int.MaxValue logischen Elementen. Leere Ansichten behalten auch eine Origin innerhalb ihrer Quelle bei. Die Vorgänge EqualsAny, GreaterThanAny, GreaterThanOrEqualAny, LessThanAny und LessThanOrEqualAny untersuchen jetzt den vollständigen logischen Eingabebereich und behandeln leere Eingaben ordnungsgemäß.

Art der einschneidenden Änderung

Dies ist eine Verhaltensänderung.

Grund für die Änderung

Konsistente Shape-Regeln machen Tensorvorgänge vorhersehbarer und erhalten explizit angeforderte Dimensionen, sodass entsprechende Shapes zusammenarbeiten können. Traversal in nativer Größe ermöglicht es Vorgängen auch, den vollständigen logischen Bereich von Spans abzudecken, die durch größeren Speicher unterstützt werden.

Weitere Informationen finden Sie unter dotnet/runtime#135060.

Überprüfen Sie Code, der von einem Tensorvorgang abhängt, der eine bestimmte Shape-Kombination akzeptiert oder ablehnt. Berücksichtigen Sie leere Standardwerte mit Rang 0 als mit einer effektiven Form von [0], und ignorieren Sie redundante führende Singletonabmessungen beim Ausrichtungs- und Shape-Vergleich. Explizite Dimensionen der Länge Null und nicht führende Singleton-Dimensionen bleiben signifikant.

Interpretieren Sie bei Stapel- und Verkettenvorgängen die Achse relativ zum effektiven Shape der ersten Eingabe. Wenn Ihr Code genaue gespeicherte Ränge oder Längen erfordert, überprüfen Sie diese Metadaten, bevor Sie den Vorgang aufrufen. Die gespeicherten Metadaten der standardmäßigen leeren Werte ändern sich nicht.

Betroffene APIs