Paliwanag at pag-iisip ng pag-andar ng tf.transpose () at operasyon ng Tensor transposition (parameter perm)

Explanation Thinking Tf



Ngayon, ibabahagi ko sa iyo ang paggamit ng tensor Tensor transpose function na tf.transpose () sa TensorFlow, na nakatuon sa parameter perm nito at ng prinsipyo nito.

Pagkakasunud-sunod ng tensyon

Bago simulang ipakilala ang transpose function, tingnan muna natin ang pagkakasunud-sunod ng Tensor



Kapag ang tensor Tensor ay isang scalar, iyon ay, isang scalar na walang direksyon, ang order nito ay 0



x0 = tf.constant(1) print(x0) # Output tf.Tensor(1, shape=(), dtype=int32)

Kapag ang Tensor ay isang vector, tulad ng [1, 2, 3], ang pagkakasunud-sunod nito ay 1



x1 = tf.constant([1, 2, 3]) print(x1) # Output tf.Tensor([1 2 3], shape=(3,), dtype=int32)

Kapag ang Tensor ay isang matrix, ang pagkakasunud-sunod nito ay 2, tulad ng
imahe

x2 = tf.constant([[1, 2], [3, 4]]) print(x2) # Output tf.Tensor([[1 2] # [3 4]], shape=(2, 2), dtype=int32)

At ang pangatlong-order na Tensor ay maaaring isaalang-alang bilang isang hanay ng mga numero ng kubo, na binubuo ng maraming maliliit na cube, at ang bawat maliit na kubo ay nag-iimbak ng isang bilang, tulad ng ipinakita sa sumusunod na pigura:

3



x3 = tf.constant([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(x3) # Output tf.Tensor([[[ 1 2 3] # [ 4 5 6]] # # [[ 7 8 9] # [10 11 12]]], shape=(2, 2, 3), dtype=int32)

Transposisyon ng Tensor

Susunod, tatalakayin natin ang transposisyon ng Tensor

Ang paglipat ng order 0 at pagkakasunud-sunod ng 1 Tensor ay masasabing walang kahulugan ang transposisyon ng order 2 Ang Tensor ay katumbas ng transaksyon ng matrix, tulad ng
dalawa
magbago sa
dalawa
nabibilang sa linear na bahagi ng algebra ng unibersidad at hindi kailangang ipakilala nang labis

Pagtuunan natin ng pansin Paglipat ng order 3 Tensor , Kung gayon kailangan mong gamitin ang pagpapaandar ng tf.transpose ()

Sa opisyal na dokumento ng pagpapaandar ng tf.transpose (), ipinakilala na ang pagpapaandar ay may parameter perm, at ang transposisyon ng Tensor ay nakumpleto sa pamamagitan ng pagtukoy sa halaga ng perm.

Kinakatawan ng perm ang tinukoy na pagbabago ng order ng tenor. Ipagpalagay na ang Tensor ay nasa order 2 at ang hugis nito = (x, y), sa estado na ito, perm = [0, 1] bilang default. Kapag inilipat ang pangalawang-order na Tensor, kung tinukoy mo ang tf.transpose (perm = [1, 0]), ang matrix transpose ay direktang nakumpleto, at ang hugis ng Tensor sa oras na ito = (y, x).

x2_ = tf.transpose(x2) print(x2_) # Output tf.Tensor([[1 3] # [2 4]], shape=(2, 2), dtype=int32)

Kapag ang pagproseso ng bagay ay isang pangatlong-order na Tensor, sa halimbawa sa ibaba, Opisyal na dokumento Ang pangungusap na ito ay ibinigay sa:
imahe

# 'perm' is more useful for n-dimensional tensors, for n > 2

Kaya ang tanong ay, bakit itinakda ang perm = [0, 2, 1]? Kapag ang parameter perm = [0, 2, 1] ay nakatakda, bakit ako nakakakuha ng ganoong isang resulta ng transpose?

Detalyadong paliwanag ng function ng tf.transpose () at mga parameter ng perm

Ito ay nauugnay sa hugis ng orihinal na Tensor mismo.

Una tingnan kung paano nabubuo ang Tensor x3. Sa Tensor, ang pinakamalabas na bracket ay naglalaman ng 2 mga braket, at ang dalawang bracket na ito ay naglalaman ng 2 mga bracket ayon sa pagkakabanggit, at ang dalawang bracket na ito ay naglalaman ng 3 mga int type na halaga, kaya ang halaga ng hugis nito ay (2, 2, 3). Kapag iguhit namin ang 3D Tensor na ito sa isang graph ng dami, tulad ng ipinakita sa figure sa ibaba.
3

x3 = tf.constant([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(x3) # Output tf.Tensor([[[ 1 2 3] # [ 4 5 6]] # # [[ 7 8 9] # [10 11 12]]], shape=(2, 2, 3), dtype=int32)

Narito ang susi, dito maaari naming maunawaan ang perm bilang Ang pagputol ng order upang i-cut ang kubo . Alam namin na ang hugis ng Tensor x3 ay (2, 2, 3), na tumutugma sa pagkakasunud-sunod ng paggupit ng orihinal na perm. Ang order ay, Gupitin ito nang patayo at parallel sa gilid. , Gupitin nang pahalang muli , Gupitin muli nang patayo at parallel sa pahalang na gilid , Tulad ng ipinakita sa figure sa ibaba, ang orihinal na hugis ng Tensor ay nakuha.
1
Tinutukoy namin ang pagkakasunud-sunod na paggupit na ito bilang 0, 1, 2 na pagliko, kaya perm = [0, 1, 2], tulad ng ipinakita sa sumusunod na pigura:
imahe
Matapos maunawaan ang pagsusulat na ito. Tingnan natin kung paano natin matutukoy ang hugis ng transposibleng Tensor kung ang resulta ng code ay hindi naipasa.

Kapag inilipat namin ang 3-dimensional na Tensor x3 at itinakda ang halaga ng perm sa [0, 2, 1], ang kaukulang hugis sa oras na ito ay mababago sa (2, 3, 2). bakit?

Ang perm = [0, 2, 1] ay nangangahulugang ang kubo ay dapat i-cut sa sumusunod na pagkakasunud-sunod: Gupitin ito nang patayo at parallel sa gilid. , Gupitin muli nang patayo at parallel sa pahalang na gilid , Gupitin nang pahalang muli , Tulad ng ipinakita sa figure sa ibaba, ang hugis ng transposed Tensor ay nakuha
imahe
imahe
Sa oras na ito, ginagamit namin ang pahayag ng pag-andar na tf.transpose (x3, perm = [0, 2, 1]) upang mapatunayan na ang resulta ng transpose ay naaayon sa resulta ng pagbawas. Sa madaling salita, ang Tensor na may hugis = (2, 2, 3) ay pinalitan ng perm = [0, 2, 1], at nagiging Tensor na may hugis = (2, 3, 2).

x3_ = tf.transpose(x3, perm = [0, 2, 1]) print(x3_) # Output tf.Tensor([[[1 4] # [2 5] # [3 6]] # # [[7 10] # [8 11] # [9 12]]], shape=(2, 3, 2), dtype=int32)

Ito ang dahilan kung bakit sa tutorial ng opisyal na website ng TensorFlow2.0, Ang opisyal na rekomendasyon ay kapag ang sukat ng Tensor ay mas malaki sa 2 , Gumamit ng mga parameter ng perm para sa pagpapatakbo ng transpose , Magiging mas maginhawa upang makamit ang epekto. Siyempre, ang premise ay kailangan mong linawin ang orihinal na hugis ng Tensor at ang deform na hugis na Tensor na gusto mo, at tukuyin ang halaga ng parameter perm ayon sa mga kasunod na kinakailangan.

Inaasahan kong ang artikulong ito ay kapaki-pakinabang para maunawaan ng lahat ang Tensor!