Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Şekiller ve Düzen

XLA Shape proto ( xla_data.proto ) bir N-boyutlu dizi sıralaması, boyutu ve veri türü (kısaca dizi) tarif etmektedir.

Terminoloji, Gösterim ve Sözleşmeler

  • Bir dizinin sırası boyut sayısına eşittir. Bir dizinin gerçek sırası , boyutu 1'den büyük olan boyut sayısıdır.

  • Bir N boyutlu dizi için boyutlar 0 N-1 kadar numaralandırılmıştır. Boyut numaraları, kolaylık sağlamak için rastgele etiketlerdir. Bu boyut numaralarının sırası, şeklin düzeninde belirli bir küçük / büyük sıralama anlamına gelmez. Layout , Layout protokolü tarafından belirlenir.

  • Kural olarak, boyutlar artan boyut numarası sırasına göre listelenmiştir. Örneğin, 3 boyutlu bir boyut [A x B x C] dizisi için, boyut 0 A boyutuna, boyut 1 B boyutuna ve boyut 2 C boyutuna sahiptir.

    XLA'daki bazı yardımcı programlar da Python'a benzer şekilde negatif endekslemeyi destekler; boyut -1 son boyuttur (bir N boyutlu dizi için N-1 eşdeğerdir). Örneğin, yukarıda açıklanan 3 boyutlu dizi için, boyut -1 C boyutuna, boyut -2 B boyutuna sahiptir ve bu böyle devam eder.

  • İki, üç ve dört boyutlu diziler genellikle boyutlarla ilişkili belirli harflere sahiptir. Örneğin, bir 2D dizi için:

    • boyut 0: y
    • boyut 1: x

    3B dizi için:

    • boyut 0: z
    • boyut 1: y
    • boyut 2: x

    4D dizisi için:

    • boyut 0: p
    • boyut 1: z
    • boyut 2: y
    • boyut 3: x
  • XLA API'sında boyut alan işlevler, boyut numarası sırasının artmasında bunu yapar. Bu, bir initializer_list olarak boyutlar iletilirken kullanılan sıralama ile eşleşir; Örneğin

    ShapeUtil::MakeShape(F32, {A, B, C, D})

    Boyut boyutu dizisi [A, B, C, D] dizisinden oluşan bir şekil oluşturur.

Yerleşim

Layout protokolü, bir dizinin bellekte nasıl temsil edildiğini açıklar. Layout protokolü aşağıdaki alanları içerir:

 message Layout {
  repeated int64 minor_to_major = 1;
  repeated int64 padded_dimensions = 2;
  optional PaddingValue padding_value = 3;
}
 

Küçük ila büyük boyut sıralaması

Gerekli tek alan minor_to_major . Bu alan, bir şekil içindeki boyutların küçükten büyüğe sıralanmasını açıklar. minor_to_major değerler dizinin boyutlarının sıralamasıdır (bir N boyutlu dizi için 0 ila N-1 ), ilk değer en büyük boyut olan son değere kadar en küçük boyuttur. En küçük boyut, doğrusal bellekte ortaya konan dizinin öğeleri arasında adım attığında en hızlı değişen boyuttur.

Örneğin, şu [2 x 3] boyutlu 2D dizisini düşünün:

 a b c
d e f
 

Burada 0 boyutu 2 boyutu ve 1 boyutu 3 boyutudur. minor_to_major alanı [0, 1] ise, 0 boyutu en küçük boyuttur ve boyut 1 en büyük boyuttur. Bu, doğrusal bellekte aşağıdaki düzene karşılık gelir:

 a d b e c f
 

0 N-1 kadar olan bu küçük-majör boyut sırası, kolon-majör ile benzerdir (2. sırada). Boyutların tekdüze bir sıralaması varsayarsak, koddaki bu düzene atıfta bulunmak için kullanabileceğimiz başka bir isim basitçe "dim 0 küçüktür".

Öte yandan, minor_to_major alanı [1, 0] ise, doğrusal bellekteki düzen:

 a b c d e f
 

Bir önemsizden büyük boyut sırası N-1 ile aşağı 0 bir için N boyutlu bir dizi üst üste-majör (rank 2 'de) ile benzerlik göstermektedir. Boyutların monotonik bir sıralaması varsayarsak, koddaki bu düzene atıfta bulunmak için kullanabileceğimiz başka bir isim basitçe "dim 0 büyüktür".

Varsayılan küçük-büyük sipariş

Yeni oluşturulan Şekiller için varsayılan düzen "boyut sırası büyük-küçük" (2. sıradaki sıra-büyük) şeklindedir.

Dolgu malzemesi

Dolgu, isteğe bağlı padded_dimensions ve padding_value alanlarında tanımlanır. padded_dimensions alanı, her bir boyutun doldurulduğu boyutları (genişlikleri) tanımlar. Varsa, padded_dimensions öğelerin sayısı şeklin sırasına eşit olmalıdır.

Örneğin, yukarıda tanımlanan [2 x 3] dizisi göz önüne alındığında, padded_dimensions [3, 5] ise 0 boyutu 3 genişliğine ve boyut 1 5 genişliğine kadar doldurulur. 0 doldurma değeri ve sütun-büyük düzen):

 a d 0 b e 0 c f 0 0 0 0 0 0 0
 

Bu, aynı diziden küçük-büyük boyut sırasına sahip aşağıdaki dizinin düzenine eşdeğerdir:

 a b c 0 0
d e f 0 0
0 0 0 0 0
 

Dizilere endeksleme

IndexUtil içindeki IndexUtil sınıfı, bir şekil ve düzen verilen çok boyutlu indeksler ve doğrusal indeksler arasında dönüştürme için araçlar sağlar. Çok boyutlu indeksler her boyut için bir int64 indeksi içerir. Doğrusal indeksler, diziyi tutan arabelleğe endekslenen tek bir int64 değeridir. Şekillerin ve mizanpajların oluşturulmasını ve düzenlenmesini kolaylaştıran yardımcı programlar için aynı dizindeki shape_util.h ve layout_util.h bakın.