Tensorbewerkingen lijnen equivalente vormen en lege tensors uit

Vanaf .NET 11 gebruiken tensorbewerkingen consistente regels voor het uitlijnen van shapes. Standaard rank-zero lege tensors en spans hebben een effectieve vorm van [0] tijdens berekeningen, en bewerkingen kunnen redundante leidende singleton-dimensies negeren wanneer ze vormen uitlijnen.

De wijziging wordt geleverd in het pakket System.Numerics.Tensors , inclusief de ondersteunde doelframeworks. Het bijwerken van het pakket kan van invloed zijn op apps die zijn gericht op eerdere .NET versies.

Geïntroduceerde versie

.NET 11

Vorig gedrag

Tensorbewerkingen gingen inconsistent om met vormen. Voor sommige bewerkingen zijn exacte shapeovereenkomsten vereist, terwijl bij andere de dimensies anders worden uitgelijnd. Als gevolg hiervan kunnen equivalente shapes met redundante leidende singleton-dimensies, zoals [1, 1, 3] en [3], worden geweigerd of verschillend worden geïnterpreteerd in verschillende bewerkingen.

Standaard lege tensors en spans behouden rang-nul metagegevens, maar bewerkingen hebben ze niet consistent behandeld als vectoren met een effectieve vorm van [0]. Stack- en samenvoegbewerkingen kunnen ook een as anders interpreteren op basis van de invoerrangen.

Sommige bewerkingen hebben ook het aantal logische elementen of offsets beperkt tot int, waardoor tensorbereiken met systeemeigen ondersteuning met meer dan int.MaxValue elementen niet correct konden worden doorlopen. De bewerkingen EqualsAny, GreaterThanAny, LessThanOrEqualAny, GreaterThanOrEqualAny en LessThanAny hebben niet consistent de volledige logische invoerlengte geïnspecteerd, inclusief voor lege invoer.

Nieuw gedrag

Tensor-bewerkingen maken nu gebruik van gedeelde regels voor vormuitlijning:

  • Standaard rank-zero lege tensors en spans hebben voor berekeningen een effectieve vorm van [0]. Hun opgeslagen Rank, Lengths en Strides veranderen niet, en expliciet gerangschikte lege vormen behouden hun afmetingen.
  • Bewerkingen kunnen redundante leidende singletondimensies toevoegen of verwijderen wanneer ze shapes uitlijnen. Bijvoorbeeld, [1, 1, 3] komt overeen met [3], maar [2, 1] en [1, 2] blijven onderscheiden. Dimensies met lengte nul en singleton-dimensies die niet vooraan staan blijven relevant.
  • Vormgelijkheid negeert alleen redundante leidende singletondimensies. Het zendt geen andere dimensies uit.
  • Stack- en concateneerbewerkingen interpreteren de as met behulp van de effectieve vorm van de eerste invoer. Andere invoer en bestemmingen worden uitgelijnd op die shape.
  • Standaard lege waarden kunnen worden doorgegeven aan [2, 0]. Een binaire bewerking tussen effectieve vormen [0] en [0, 2] accepteert de incompatibele achterste dimensies niet.
  • Bronnen en bestemmingen behouden hun aangevraagde metagegevens over de vorm wanneer bewerkingen deze uitlijnen.

Tensor spans met systeemeigen ondersteuning kunnen nu worden doorlopen met lengten en verschuivingen van systeemeigen grootte, inclusief spans met meer dan int.MaxValue logische elementen. Lege weergaven behouden ook een origin binnen hun bron. De bewerkingen EqualsAny, GreaterThanAny, GreaterThanOrEqualAny, LessThanAny en LessThanOrEqualAny inspecteren nu het volledige logische invoerbereik en verwerken lege invoer correct.

Type van brekende verandering

Dit is een gedragsverandering.

Reden voor wijziging

Consistente vormregels maken tensorbewerkingen voorspelbaarder en behouden expliciet aangevraagde dimensies, waardoor equivalente vormen samen kunnen werken. Met systeemeigen iteratie kunnen bewerkingen ook het volledige logische bereik van bereiken omvatten die worden ondersteund door grotere opslag.

Zie dotnet/runtime#135060 voor meer informatie.

Controleer code die afhankelijk is van een tensor-bewerking die een bepaalde shapecombinatie accepteert of weigert. Houd rekening met standaard lege waarden met rang nul als een effectieve vorm van [0], en negeer redundante voorloopdimensies tijdens de uitlijning en vormvergelijking. Expliciete dimensies met lengte nul en singleton-dimensies die niet vooraan staan blijven van betekenis.

Voor stack- en samenvoegbewerkingen interpreteert u de as ten opzichte van de effectieve vorm van de eerste invoer. Als uw code exacte opgeslagen rangen of lengten vereist, valideert u die metagegevens voordat u de bewerking aanroept. De voor standaard lege waarden opgeslagen metagegevens worden niet gewijzigd.

Betreffende API's