Polymorfismus tvaru v JAX může vést k několika běžným chybám díky jeho zpracování symbolických rozměrů ve tvarech pole. Zde jsou některé z těchto chyb:
1.. Nekompatibilní tvary pro vysílání: Při použití polymorfismu tvaru mohou operace jako přidat nebo násobení matice selhat, pokud symbolické rozměry neodpovídají očekávaným tvarům. Například pokus o přidání pole s tvary `(v,)` a `(4,)` bude mít za následek chybu, protože `v` je symbolická dimenze, která se nemusí vždy vyrovnat 4 [1] [2].
2. Chyby kontroly tvaru: Operace jako násobení matice vyžadují specifická omezení tvaru, jako je například matice čtverců. Pokud symbolické rozměry nesplňují tato omezení (např. Použití `(v, 4)` namísto `(v, v)`), Jax vyvolá chyby [1] [2].
3. Operace neprůkazných rozměrů: Porovnání symbolických rozměrů může být neprůkazné, pokud je nelze vyřešit na booleovskou hodnotu pro všechny možné hodnoty symbolických rozměrů. To vede k chybám, jako je „NesclusidesideDidensionasionoperation“, když se snaží porovnat symbolické tvary [1].
4. Chyby tvrzení tvaru: Jax předpokládá, že proměnné dimenze jsou přísně pozitivní celá čísla. Pokud skutečné vstupní tvary nesplňují tyto předpoklady (např. Tvar jako `(b, b, 2*d)`, když `d` není celé číslo), Jax během provádění vyvolá chyby [1] [2].
Tyto chyby zdůrazňují potřebu pečlivě řídit symbolické rozměry při použití polymorfismu tvaru v JAX.
Citace:[1] https://docs.jax.dev/en/latest/export/shape_poly.html
[2] https://github.com/google/jax/blob/main/jax/experimental/jax2tf/readme.md
[3] https://docs.jax.dev/en/latest/notebooks/thinking_in_jax.html
[4] https://stackoverflow.com/questions/65934509/errors-in-polymorfism
[5] https://github.com/google/jax/discussions/15995
[6] https://docs.jax.dev/en/latest/debugging/index.html
[7] https://jax.readthedocs.io/en/latest/errors.html
[8] https://laracasts.com/discuss/channels/eloquent/polymorphism-why-should-i-violate-tabase-design ?reply=103880