Ohledně reshape
:
Pozor si musíme dát pouze na to, že pokud bude mít nový tenzor více komponent, než tenzor původní, nemusí být nově přidané komponenty správně inicializovány (nemusí být nulové).
Výsledek reshape
musí mít stejný počet prvků jako původní tensor, viz třeba citace z https://pytorch.org/docs/stable/generated/torch.reshape.html:
Returns a tensor with the same data and number of elements as
input
, but with the specified shape.
Díky, to je pravda. Já si to pořád pamatuju z původního Torche, kde to kdysi šlo (ale ten už jsem nepoužil hodně dlouho, naposledy před covidem). Opravím!
asi bych doplnil, ze puvodni Torch byl psan pro Luu, takze se tam indexuje od jednicky a ne od nuly. Je to prirozenejsi a treba zaporne indexy jsou potom "logicke". Ale zase puvodni zdrojaky moc neprevoditelne (a docela jich pro Torch kdysi vzniklo, tak cca pred 8 lety rekl bych)
Tohle padlo v predchozim clanku autora o PyTorch.
Mimochodem potesila me existence spriznene osoby ktera take povazuje indexovani od 1 v matematickych aplikacich za vhodnejsi. U programatoru se spis potkavam s obecnou preferenci od 0, protoze "C" a "Dijkstra".
7. 11. 2024, 09:16 editováno autorem komentáře
jj tech jazyku je docela hodne (tedy krome "ceckovych"), treba prave ty "matematicke": APL, Fortran, Julia, MATLAB, Mathematica, Wolfram lang. To není náhoda, tato nika to tak prostě má.
Kromě reshape
existuje v PyTorchi ještě view
, který nabízí mj. skoro stejnou funkcionalitu, ale přijde mi, že je v PyTorchi používán častěji než reshape
(i když je to trochu nešťastné, protože v NumPy/TensorFlow/Jax je možné použít jen reshape
; je pravda, že NumPy/Jax má view
, ale ten neumí měnit shape).
Díky za článek.
Chápu správně, že v tomhle kontextu znamená pojem tensor v podstatě z definice k-rozměrné pole a nemá hlouběji moc společného s tím čemu říkáme tensor (vektor, ...) ve fyzice/matematice? Nebo tam někde je schované i rozlišování "horních" a "dolních" (ko- a kontra-variantních) indexů a transformace se změnou báze? Jak se pak interpretuje reshaping?
Ptám se, protože co jsem viděl tak u těch použití v neuronových sítích (což je deklarované použití) "tradiční" tensorová interpretace pořád smysl dává.
Ano, tensor v tomhle kontextu je jen označení pro n-rozměrné pole. V běžné terminologii se říká skalár/vektor/matice podle dimenzionality, ale když je třeba pojmenovat společný typ, tak se používá buď tensor ( torch.Tensor
, tf.Tensor
) nebo se dá přímo říct np.ndarray
.
Běžné operace nad tensory jsou element-wise operace, maticové násobení, různé lineárně algebraické operace, vše případně včetně různých batchových dimenzí. Třeba při práci s obrázky je nejčastější čtyřrozměrný tensor se shape [batch_size, height, width, channels]
(takhle je to v NumPy/JAX/TensorFlow; vy PyTorchi by kanály byly na druhém místě).
(Nabízená operace [v PyTorch/NumPy/TensorFlow/JAX] je také kontrakce tensorů pomocí notace založené na Einstein summation convention https://pytorch.org/docs/stable/generated/torch.einsum.html, s ní se dá užít hodně zábavy )
7. 11. 2024, 12:41 editováno autorem komentáře