Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje .NET 11 používají tenzorové operace konzistentní pravidla zarovnání tvarů. Výchozí prázdné tensory a rozsahy s nulovým řádem mají efektivní tvar [0] během výpočtů a operace můžou při zarovnání tvarů ignorovat nadbytečné počáteční jednoduché rozměry.
Tato změna se dodává v balíčku System.Numerics.Tensors, včetně podporovaných cílových frameworků. Aktualizace balíčku může mít vliv na aplikace, které cílí na dřívější .NET verze.
Verze byla představena
.NET 11
Předchozí chování
Operace tensoru zpracovávaly tvary nekonzistentně. Některé operace vyžadují přesnou shodu obrazců, zatímco jiné zarovnávaly rozměry jinak. V důsledku toho mohly být ekvivalentní obrazce s redundantními počátečními jednoprvkovými dimenzemi, jako jsou [1, 1, 3] a [3], odmítnuty nebo interpretovány odlišně napříč operacemi.
Výchozí prázdné tensory a rozsahy zachovávaly metadata rank-nula, ale operace s nimi konzistentně nezacházely jako s vektory s efektivním tvarem [0]. Operace zásobníku a zřetězení by také mohly interpretovat osu odlišně podle hodností vstupů.
Některé operace také zúžily počet logických prvků nebo posuny na int, což zabránilo správnému procházení rozsahů tensorů podporovaných nativním kódem s více než int.MaxValue prvky. Operace EqualsAny, GreaterThanOrEqualAny, GreaterThanAny, LessThanAny a LessThanOrEqualAny nekontrolovaly konzistentně úplnou délku logického vstupu, včetně prázdných vstupů.
Nové chování
Operace Tensoru teď používají sdílená pravidla zarovnání tvarů:
- Výchozí prázdné tenzory a spans s nulovou hodností mají pro výpočty efektivní tvar
[0]. Jejich uloženéRank,LengthsaStridesse nemění a explicitně uspořádané prázdné obrazce si zachovávají své rozměry. - Operace můžou při zarovnávání tvarů přidávat nebo odebírat nadbytečné počáteční singletonové dimenze. Například
[1, 1, 3]se zarovná s[3], ale[2, 1]a[1, 2]zůstávají odlišné. Rozměry nulové délky a jednoprvkové rozměry, které nejsou na začátku, zůstávají významné. - Rovnost tvarů ignoruje pouze redundantní počáteční jednoprvkové dimenze. Nevysílá do jiných dimenzí.
- Operace stack a zřetězení interpretují osu pomocí efektivního tvaru prvního vstupu. Ostatní vstupy a cíle jsou v souladu s tímto tvarem.
- Výchozí prázdné hodnoty se mohou šířit do
[2, 0]. Binární operace mezi efektivními tvary[0]a[0, 2]odmítne nekompatibilní rozměry na konci. - Zdroje a cíle si uchovávají požadovaná metadata tvaru, když je operace zarovnají.
Spany podporované nativním tensorem lze nyní procházet s délkami a posuny o nativní velikosti, včetně spanů s více než int.MaxValue logickými prvky. Prázdná zobrazení také uchovávají původ úložiště ve svém zdroji. Operace EqualsAny, GreaterThanOrEqualAny, GreaterThanAny, LessThanAny a LessThanOrEqualAny nyní kontrolují celý logický vstupní rozsah a správně zpracovávají prázdné vstupy.
Typ zásadní změny
Jedná se o změnu chování.
Důvod změny
Konzistentní pravidla tvarů činí operace s tensory předvídatelnějšími a zachovávají explicitně požadované rozměry, přičemž zároveň umožňují, aby ekvivalentní tvary fungovaly společně. Procházení v nativní velikosti také umožňuje operacím pokrýt celý logický rozsah rozsahů podložených větším úložištěm.
Další informace najdete v tématu dotnet/runtime#135060.
Doporučená akce
Zkontrolujte kód, který závisí na operaci tensoru, která přijímá nebo odmítá konkrétní kombinaci tvarů. U výchozích prázdných hodnot s nulovým řádem je potřeba počítat s efektivním tvarem [0] a redundantní úvodní jedničkové dimenze ignorovat při zarovnání a porovnání tvarů. Explicitní rozměry nulové délky a nepočáteční jednoprvkové dimenze zůstávají významné.
U operací stack a zřetězení interpretujte osu vzhledem k efektivnímu tvaru prvního vstupu. Pokud váš kód vyžaduje přesné uložené pořadí nebo délky, před voláním operace ověřte správnost těchto metadat. Uložená metadata výchozích prázdných hodnot se nemění.
Ovlivněná rozhraní API
- Tensor.Broadcast, Tensor.BroadcastTo a Tensor.TryBroadcastTo
- Elementární a kopírovací operace na Tensor, které zarovnávají tvary tenzorů nebo zapisují do cíle zadaného volajícím
- Tensor.Concatenate, Tensor.ConcatenateOnDimension, Tensor.Stack a Tensor.StackAlongDimension
- Tensor.Reshape, Tensor.Split, Tensor.SqueezeDimension, Tensor.Unsqueeze, Tensor.SetSlice, Tensor.ResizeTo, Tensor.PermuteDimensions, Tensor.SequenceEqual, Tensor.Reverse, a Tensor.ReverseDimension
- Tensor.EqualsAny, Tensor.GreaterThanAny, Tensor.GreaterThanOrEqualAny, Tensor.LessThanAnya Tensor.LessThanOrEqualAny
- Tensor.IndexOfMax, Tensor.IndexOfMaxMagnitude, Tensor.IndexOfMin a Tensor.IndexOfMinMagnitude