Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Från och med .NET 11 använder tensoråtgärder konsekventa regler för formjustering. Rank-0-tomma tensorer och spann som standard har en effektiv form av [0] under beräkningar, och operationer kan ignorera redundanta inledande singleton-dimensioner när de anpassar formerna till varandra.
Ändringen levereras i paketet System.Numerics.Tensors , inklusive dess målramverk som stöds. Uppdatering av paketet kan påverka appar som riktar sig mot tidigare .NET versioner.
Version som introducerades
.NET 11
Tidigare beteende
Tensoroperationer hanterade dimensioner inkonsekvent. Vissa åtgärder krävde exakta formmatchningar, medan andra anpassade dimensioner på olika sätt. Därför kan motsvarande former med redundanta inledande singleton-dimensioner, till exempel [1, 1, 3] och [3], avvisas eller tolkas på olika sätt mellan olika operationer.
Standard tomma tensorer och spann bevarade metadata på rang noll, men åtgärderna behandlade dem inte konsekvent som vektorer med en effektiv form av [0]. Stack- och sammanfogningsåtgärder kan också tolka en axel på olika sätt baserat på indatans rang.
Vissa åtgärder begränsade också antalet logiska element eller förskjutningar till int, vilket förhindrade tensorintervall med inbyggt stöd med fler än int.MaxValue element från att passeras korrekt. Åtgärderna EqualsAny, GreaterThanAny, GreaterThanOrEqualAny, LessThanAnyoch LessThanOrEqualAny inspekterade inte konsekvent den fullständiga logiska indatalängden, inklusive tomma indata.
Nytt beteende
Tensoroperationer använder nu delade regler för formanpassning:
- Tomma tensorer och span med rang noll har en effektiv form av
[0]för beräkningar. Deras lagradeRank,LengthsochStridesändras inte, och explicit rangordnade tomma former behåller sina dimensioner. - Operationer kan lägga till eller ta bort redundanta inledande singleton-dimensioner när de justerar formerna. Till exempel är
[1, 1, 3]i linje med[3], men[2, 1]och[1, 2]förblir distinkta. Nolllängdsdimensioner och icke-ledande singeldimensioner är fortfarande betydande. - Formlikhet ignorerar endast redundanta inledande singleton-dimensioner. Den skickar inte vidare andra dimensioner.
- Stack- och sammanfogningsåtgärder tolkar axeln med hjälp av den första indatans effektiva form. Andra indata och mål överensstämmer med den formen.
- Tomma standardvärden som standard kan sändas till
[2, 0]. En binär operation mellan effektiva shape[0]och[0, 2]avvisar de inkompatibla avslutande dimensionerna. - Källor och mål behåller sina begärda formmetadata när åtgärderna riktar in dem mot varandra.
Tensorintervall som backas av inbyggt minne kan nu traverseras med längder och offsetar i inbyggd storlek, inklusive intervall med mer än int.MaxValue logiska element. Tomma vyer har också ett lagringsursprung inom sin källa. Åtgärderna EqualsAny, GreaterThanAny, GreaterThanOrEqualAny, LessThanAnyoch LessThanOrEqualAny inspekterar nu det fullständiga logiska indataområdet och hanterar tomma indata korrekt.
Typ av kompatibilitetsbrytande ändring
Det här är en beteendeförändring.
Orsak till ändringen
Konsekventa formregler gör tensoroperationer mer förutsägbara och bevarar uttryckligen begärda dimensioner samtidigt som ekvivalenta former kan fungera tillsammans. Traversering i naturlig storlek gör också att åtgärder kan täcka hela det logiska intervallet för spann som stöds av större lagringsutrymme.
Mer information finns i dotnet/runtime#135060.
Rekommenderad åtgärd
Granska kod som är beroende av en tensor-åtgärd som accepterar eller avvisar en viss formkombination av dimensioner. Ta hänsyn till tomma förvalda värden för rang-noll som en effektiv form av [0], och ignorera redundanta inledande singleton-dimensioner vid justering och formjämförelse. Explicita nollängdsdimensioner och icke-ledande endimensioner har fortfarande betydelse.
För stack- och sammanfogningsåtgärder tolkar du axeln i förhållande till den första indatans effektiva form. Om koden kräver exakta lagrade ranker eller längder, kontrollerar du dessa metadata innan du anropar operationen. lagrade metadata för tomma standardvärden ändras inte.
Berörda API:er
- Tensor.Broadcast, Tensor.BroadcastTo och Tensor.TryBroadcastTo
- Element- och kopieringsåtgärder på Tensor som justerar tensorformer eller skriver till ett mål som tillhandahålls av anroparen
- Tensor.Concatenate, Tensor.ConcatenateOnDimension, Tensor.Stackoch Tensor.StackAlongDimension
- Tensor.Reshape, Tensor.Split, Tensor.SqueezeDimension, Tensor.Unsqueeze, Tensor.PermuteDimensions, Tensor.SetSlice, Tensor.SequenceEqual, Tensor.ResizeTo, Tensor.Reverse och Tensor.ReverseDimension
- Tensor.EqualsAny, Tensor.GreaterThanAny, Tensor.GreaterThanOrEqualAny, Tensor.LessThanAny, och Tensor.LessThanOrEqualAny
- Tensor.IndexOfMax, Tensor.IndexOfMaxMagnitude, Tensor.IndexOfMinoch Tensor.IndexOfMinMagnitude