Zwróć plasterek krokowy z `input`.
Uwaga, większość użytkowników Pythona będzie chciała używać Pythona Tensor.__getitem__
lub Variable.__getitem__
zamiast bezpośrednio tej opcji.
Celem tej operacji jest utworzenie nowego tensora z podzbiorem elementów z n-wymiarowego tensora „wejściowego”. Podzbiór jest wybierany przy użyciu sekwencji „m” specyfikacji rzadkiego zakresu zakodowanych w argumentach tej funkcji. Należy zauważyć, że w niektórych przypadkach „m” może być równe „n”, ale nie musi tak być. Każdy wpis specyfikacji zakresu może być jednym z następujących:
- Elipsa (...). Elipsy służą do sugerowania zera lub większej liczby wymiarów selekcji pełnowymiarowej i są tworzone przy użyciu `ellipsis_mask`. Na przykład „foo[...]” to wycinek tożsamości.
- Nowa oś. Służy do wstawiania nowego wymiaru kształtu=1 i jest tworzony przy użyciu `new_axis_mask`. Na przykład `foo[:, ...]`, gdzie `foo` ma kształt `(3, 4)`, tworzy tensor `(1, 3, 4)`.
- Zakres „początek: koniec: krok”. Służy do określenia ile wybrać z danego wymiaru. „krok” może być dowolną liczbą całkowitą oprócz 0. „początek” jest liczbą całkowitą reprezentującą indeks pierwszej wartości do wybrania, podczas gdy „koniec” oznacza indeks ostatniej wartości do wybrania. Liczba wartości wybranych w każdym wymiarze to „koniec – początek”, jeśli „krok > 0” i „początek – koniec”, jeśli „krok < 0”. „Początek” i „koniec” mogą być wartościami ujemnymi, gdzie „-1” jest ostatnim elementem, „-2” jest przedostatnim elementem. `begin_mask` kontroluje, czy zastąpić jawnie podany `begin` domyślną wartością efektywną `0`, jeśli `krok > 0` i `-1`, jeśli `krok < 0`. `end_mask` jest analogiczne, ale daje liczbę wymaganą do utworzenia największego otwartego przedziału. Na przykład, biorąc pod uwagę tensor kształtu `(3,)` `foo[:]`, efektywnymi `początkiem' i `końcem' są `0` i `3`. Nie zakładaj, że jest to równoważne `foo[0:-1]`, które ma efektywny „początek” i „koniec” wynoszący „0” i „2”. Innym przykładem jest `foo[-2::-1]`, które odwraca pierwszy wymiar tensora, usuwając dwa ostatnie (w oryginalnej kolejności elementów). Na przykład `foo = [1,2,3,4]; foo[-2::-1]` to `[4,3]`.
- Pojedynczy indeks. Służy do przechowywania tylko elementów, które mają dany indeks. Na przykład (`foo[2, :]` na tensorze kształtu `(5,6)` tworzy tensor kształtu `(6,)`. Jest on zakodowany w parametrach `begin` i `end` oraz `shrink_axis_mask`.
Każda specyfikacja zakresu pojęciowego jest zakodowana w argumencie operacji. To kodowanie najlepiej zrozumieć, rozważając nietrywialny przykład. W szczególności `foo[1, 2:4, None, ..., :-3:-1, :]` będzie kodowane jako
begin = [1, 2, x, x, 0, x] # x denotes don't care (usually 0)
end = [2, 4, x, x, -3, x]
strides = [1, 1, x, x, -1, 1]
begin_mask = 1<<4 | 1<<5 = 48
end_mask = 1<<5 = 32
ellipsis_mask = 1<<3 = 8
new_axis_mask = 1<<2 = 4
shrink_axis_mask = 1<<0 = 1
W tym przypadku, jeśli „foo.shape” wynosi (5, 5, 5, 5, 5, 5), ostateczny kształt plasterka przyjmuje postać (2, 1, 5, 5, 2, 5). Przeanalizujmy krok po kroku każdą specyfikację argumentu.1. Pierwszy argument w przykładowym wycinku zostaje zamieniony na „begin = 1” i „end = start + 1 = 2”. Aby odróżnić od oryginalnej specyfikacji `2:4`, ustawiamy również odpowiedni bit w `shrink_axis_mask`.
2. „2:4” oznacza 2, 4, 1 na początek, koniec i krok. Wszystkie maski mają zerowe bity.
3. None jest synonimem tf.newaxis
. Oznacza to wstawienie wymiaru o rozmiarze 1 w ostatecznym kształcie. Wartości fikcyjne są dodawane do początku, końca i kroku, podczas gdy ustawiony jest bit new_axis_mask.
4. `...` pobierz pełne zakresy z dowolnej liczby wymiarów, aby w pełni określić wycinek dla każdego wymiaru kształtu wejściowego.
5. `:-3:-1` pokazuje użycie indeksów ujemnych. Ujemny indeks „i” powiązany z wymiarem mającym kształt „s” jest konwertowany na dodatni indeks „s + i”. Zatem `-1` staje się `s-1` (tzn. ostatnim elementem). Ta konwersja jest wykonywana wewnętrznie, więc początek, koniec i kroki otrzymują x, -3 i -1. Odpowiedni bit Begin_mask jest ustawiony, aby wskazać, że zakres początkowy jest pełnym zakresem (ignorując x).
6. `:` wskazuje, że wybrana została cała zawartość odpowiedniego wymiaru. Jest to odpowiednik `::` lub `0::1`. początek, koniec, a kroki otrzymują odpowiednio 0, 0 i 1. Ustawione są także odpowiednie bity w `begin_mask` i `end_mask`.
Wymagania : `0 != kroki[i] dla i w [0, m)` `maska_elipsy musi być potęgą dwójki (tylko jedna wielokropek)`
Klasy zagnieżdżone
klasa | StridedSlice.Opcje | Opcjonalne atrybuty dla StridedSlice |
Metody publiczne
Wyjście <T> | jako wyjście () Zwraca symboliczny uchwyt tensora. |
statyczny StridedSlice.Options | BeginMask (Długie BeginMask) |
statyczny <T, U rozszerza numer> StridedSlice <T> | |
statyczny StridedSlice.Options | ellipsisMask (Długa elipsyMaska) |
statyczny StridedSlice.Options | maska końcowa (długa maska końcowa) |
statyczny StridedSlice.Options | nowośćAxisMask (Długa nowaAxisMask) |
Wyjście <T> | wyjście () |
statyczny StridedSlice.Opcje | kurczyćAxisMask (długie kurczenieAxisMask) |
Metody dziedziczone
Metody publiczne
publiczne wyjście <T> asOutput ()
Zwraca symboliczny uchwyt tensora.
Dane wejściowe operacji TensorFlow są wynikami innej operacji TensorFlow. Ta metoda służy do uzyskania symbolicznego uchwytu reprezentującego obliczenia danych wejściowych.
public static StridedSlice.Options BeginMask (Long BeginMask)
Parametry
rozpocznij maskę | maska bitowa, w której bit i wynoszący 1 oznacza zignorowanie wartości początkowej i zamiast tego użycie największego możliwego interwału. W czasie wykonywania Begin[i] zostanie zastąpione przez `[0, n-1)`, jeśli `stride[i] > 0` lub `[-1, n-1]`, jeśli `stride[i] < 0` |
---|
public static StridedSlice <T> utwórz ( Zakres zakresu, wejście argumentu <T>, początek argumentu <U>, koniec argumentu <U>, kroki argumentu <U>, opcje... opcje)
Metoda fabryczna służąca do tworzenia klasy opakowującej nową operację StridedSlice.
Parametry
zakres | aktualny zakres |
---|---|
zaczynać | `begin[k]` określa przesunięcie w specyfikacji `k`tego zakresu. Dokładny wymiar, któremu to odpowiada, zostanie określony przez kontekst. Wartości wykraczające poza zakres zostaną dyskretnie zablokowane. Jeśli `k`-ty bit `begin_mask`, wówczas `begin[k]` jest ignorowany i zamiast tego używany jest pełny zakres odpowiedniego wymiaru. Wartości ujemne powodują rozpoczęcie indeksowania od najwyższego elementu, np. jeśli `foo==[1,2,3]` to `foo[-1]==3`. |
koniec | `end[i]` jest jak `begin` z tą różnicą, że `end_mask` służy do określenia pełnych zakresów. |
kroki | `strides[i]` określa przyrost w `i` specyfikacji po wyodrębnieniu danego elementu. Indeksy ujemne odwrócą pierwotną kolejność. Wartości zewnętrzne lub zakresowe są ograniczane do `[0,dim[i]), jeśli plasterek[i]>0` lub `[-1,dim[i]-1], jeśli plasterek[i] < 0` |
opcje | przenosi opcjonalne wartości atrybutów |
Powroty
- nowa instancja StridedSlice
public static StridedSlice.Options ellipsisMask (Długa ellipsisMask)
Parametry
elipsaMaska | maska bitowa, gdzie bit „i” ma wartość 1, co oznacza, że „i” pozycja jest w rzeczywistości elipsą. Maksymalnie jeden bit może wynosić 1. Jeśli `ellipsis_mask == 0`, wówczas dostarczana jest niejawna maska elipsy o wartości `1 << (m+1)`. Oznacza to, że `foo[3:5] == foo[3:5, ...]`. Wielokropek domyślnie tworzy tyle specyfikacji zakresu, ile potrzeba, aby w pełni określić przekrojowy zakres dla każdego wymiaru. Na przykład dla 4-wymiarowego tensora `foo` plasterek `foo[2, ..., 5:8]` implikuje `foo[2, :, :, 5:8]`. |
---|
public static StridedSlice.Options endMask (Long endMask)
Parametry
maska końcowa | analogicznie do `begin_mask` |
---|
public static StridedSlice.Options newAxisMask (Długa nowaAxisMask)
Parametry
nowaMaska Osi | maska bitowa, gdzie bit „i” ma wartość 1, co oznacza, że „i” specyfikacja tworzy nowy wymiar kształtu 1. Na przykład `foo[:4, tf.newaxis, :2]` utworzy tensor kształtu `(4, 1, 2)`. |
---|
public static StridedSlice.Options zmniejszAxisMask (Długie skurczenieAxisMask)
Parametry
zmniejszyćAxisMask | maska bitowa, gdzie bit „i” oznacza, że „i” specyfikacja powinna zmniejszyć wymiarowość. początek i koniec muszą sugerować wycinek o rozmiarze 1 w wymiarze. Na przykład w Pythonie można zrobić `foo[:, 3, :]`, co spowoduje, że `shrink_axis_mask` będzie wynosić 2. |
---|