Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 gespeichertenRank,LengthsundStridesä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.
Empfohlene Maßnahme
Ü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
- Tensor.Broadcast, Tensor.BroadcastTo und Tensor.TryBroadcastTo
- Elementweise und Kopiervorgänge auf Tensor, die Tensorformen angleichen oder in ein vom Aufrufer bereitgestelltes Ziel schreiben
- Tensor.Concatenate, Tensor.ConcatenateOnDimension, Tensor.Stack und Tensor.StackAlongDimension
- Tensor.Reshape, Tensor.Split, Tensor.SqueezeDimension, Tensor.PermuteDimensions, Tensor.SetSlice, Tensor.Unsqueeze, Tensor.SequenceEqual, Tensor.ResizeTo, Tensor.Reverse, und Tensor.ReverseDimension
- Tensor.EqualsAny, Tensor.GreaterThanAny, Tensor.GreaterThanOrEqualAny, Tensor.LessThanAny und Tensor.LessThanOrEqualAny
- Tensor.IndexOfMax, Tensor.IndexOfMaxMagnitude, Tensor.IndexOfMin und Tensor.IndexOfMinMagnitude