`input`에서 스트라이드 슬라이스를 반환합니다.
대부분의 Python 사용자는 이 작업을 직접 사용하는 대신 Python Tensor.__getitem__
또는 Variable.__getitem__
사용하기를 원할 것입니다.
이 작업의 목표는 'n' 차원 '입력' 텐서의 요소 하위 집합을 사용하여 새 텐서를 생성하는 것입니다. 하위 집합은 이 함수의 인수로 인코딩된 일련의 'm' 희소 범위 지정을 사용하여 선택됩니다. 어떤 경우에는 'm'이 'n'과 같을 수도 있지만 반드시 그럴 필요는 없습니다. 각 범위 지정 항목은 다음 중 하나일 수 있습니다.
- 줄임표(...). 타원은 전체 차원 선택의 차원이 0개 이상임을 암시하는 데 사용되며 `ellipsis_mask`를 사용하여 생성됩니다. 예를 들어 `foo[...]`는 ID 슬라이스입니다.
- 새로운 축. 이는 새로운 모양=1 차원을 삽입하는 데 사용되며 `new_axis_mask`를 사용하여 생성됩니다. 예를 들어, `foo`가 `(3, 4)` 형태인 `foo[:, ...]`는 `(1, 3, 4)` 텐서를 생성합니다.
- '시작:끝:스트라이드' 범위. 이는 주어진 차원에서 선택할 정도를 지정하는 데 사용됩니다. 'stride'는 0을 제외한 모든 정수일 수 있습니다. 'begin'은 선택할 첫 번째 값의 인덱스를 나타내는 정수이고, 'end'는 선택할 마지막 값의 인덱스를 나타냅니다. 각 차원에서 선택된 값의 수는 'stride > 0'인 경우 'end - start'이고 'stride < 0'인 경우 'begin - end'입니다. `begin`과 `end`는 음수일 수 있습니다. 여기서 `-1`은 마지막 요소이고 `-2`는 마지막에서 두 번째입니다. `begin_mask`는 명시적으로 주어진 `begin`을 `stride > 0`인 경우 암시적 유효 값 `0`으로 대체하고 `stride < 0`인 경우 `-1`로 대체할지 여부를 제어합니다. `end_mask`는 유사하지만 가장 큰 개방 간격을 생성하는 데 필요한 숫자를 생성합니다. 예를 들어, `(3,)` 텐서 `foo[:]` 형태가 주어지면 유효한 `begin`과 `end`는 `0`과 `3`입니다. 이것이 `0`과 `2`의 효과적인 `시작`과 `끝`을 갖는 `foo[0:-1]`과 동일하다고 가정하지 마십시오. 또 다른 예는 텐서의 첫 번째 차원을 뒤집고 마지막 두 차원을 삭제하는 `foo[-2::-1]`입니다(원래 순서 요소에서). 예를 들어 `foo = [1,2,3,4]; foo[-2::-1]`은 `[4,3]`입니다.
- 단일 인덱스. 이는 특정 인덱스가 있는 요소만 유지하는 데 사용됩니다. 예를 들어, `(5,6)` 모양 텐서의 (`foo[2, :]`는 모양 `(6,)` 텐서를 생성합니다. 이는 `begin`, `end` 및 `shrink_axis_mask`로 인코딩됩니다.
각 개념적 범위 사양은 op의 인수로 인코딩됩니다. 이 인코딩은 사소한 예를 고려하여 가장 잘 이해됩니다. 특히 `foo[1, 2:4, None, ..., :-3:-1, :]`는 다음과 같이 인코딩됩니다.
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
이 경우 `foo.shape`가 (5, 5, 5, 5, 5, 5)이면 슬라이스의 최종 모양은 (2, 1, 5, 5, 2, 5)가 됩니다. 각 인수 사양을 단계별로 살펴보겠습니다.1. 예제 슬라이스의 첫 번째 인수는 `begin = 1` 및 `end = start + 1 = 2`로 변환됩니다. 원래 사양 '2:4'와 명확하게 하기 위해 'shrink_axis_mask'에 적절한 비트도 설정했습니다.
2. '2:4'는 시작, 끝, 보폭에 2, 4, 1을 기여합니다. 모든 마스크에는 0비트가 기여되었습니다.
3. None 은 tf.newaxis
의 동의어입니다. 이는 최종 모양에 크기 1 차원의 차원을 삽입하는 것을 의미합니다. new_axis_mask 비트가 설정되는 동안 더미 값은 start, end 및 stride에 기여됩니다.
4. `...`는 입력 모양의 모든 차원에 대한 슬라이스를 완전히 지정하는 데 필요한 만큼의 차원에서 전체 범위를 가져옵니다.
5. `:-3:-1`은 음수 인덱스의 사용을 보여줍니다. 모양이 `s`인 차원과 연결된 음수 인덱스 `i`는 양수 인덱스 `s + i`로 변환됩니다. 따라서 `-1`은 `s-1`(즉, 마지막 요소)이 됩니다. 이 변환은 내부적으로 수행되므로 시작, 끝 및 스트라이드는 x, -3 및 -1을 받습니다. 시작 범위가 전체 범위(x 무시)임을 나타내기 위해 적절한 start_mask 비트가 설정됩니다.
6. `:`는 해당 차원의 전체 내용이 선택되었음을 나타냅니다. 이는 `::` 또는 `0::1`과 동일합니다. 시작, 끝, 스트라이드는 각각 0, 0, 1을 받습니다. `begin_mask` 및 `end_mask`의 적절한 비트도 설정됩니다.
요구 사항 : `0 != strides[i] for i in [0, m)` `ellipsis_mask는 2의 거듭제곱이어야 합니다(단 하나의 생략 부호)`
중첩 클래스
수업 | StridedSlice.Options | StridedSlice 의 선택적 속성 |
공개 방법
출력 <T> | 출력 () 텐서의 기호 핸들을 반환합니다. |
정적 StridedSlice.Options | BeginMask (긴 BeginMask) |
static <T, U 확장 번호> StridedSlice <T> | |
정적 StridedSlice.Options | ellipsisMask (긴 ellipsisMask) |
정적 StridedSlice.Options | endMask (긴 endMask) |
정적 StridedSlice.Options | newAxisMask (긴 newAxisMask) |
출력 <T> | 출력 () |
정적 StridedSlice.Options | ShrinkAxisMask (긴 ShrinkAxisMask) |
상속된 메서드
공개 방법
공개 출력 <T> asOutput ()
텐서의 기호 핸들을 반환합니다.
TensorFlow 작업에 대한 입력은 다른 TensorFlow 작업의 출력입니다. 이 메서드는 입력 계산을 나타내는 기호 핸들을 얻는 데 사용됩니다.
공개 정적 StridedSlice.Options startMask (긴 startMask)
매개변수
시작마스크 | 비트 i가 1인 비트마스크는 시작 값을 무시하고 대신 가능한 가장 큰 간격을 사용한다는 의미입니다. 런타임 시 start[i]는 `stride[i] > 0`인 경우 `[0, n-1)`으로 대체되고 `stride[i] < 0`인 경우 `[-1, n-1]`로 대체됩니다. |
---|
public static StridedSlice <T> create ( 범위 범위, 피연산자 <T> 입력, 피연산자 <U> 시작, 피연산자 <U> 끝, 피연산자 <U> 스트라이드, 옵션... 옵션)
새로운 StridedSlice 작업을 래핑하는 클래스를 생성하는 팩토리 메서드입니다.
매개변수
범위 | 현재 범위 |
---|---|
시작하다 | `begin[k]`는 `k`번째 범위 지정에 대한 오프셋을 지정합니다. 이에 해당하는 정확한 치수는 상황에 따라 결정됩니다. 범위를 벗어난 값은 자동으로 고정됩니다. `begin_mask`의 `k`번째 비트인 경우 `begin[k]`는 무시되고 대신 적절한 차원의 전체 범위가 사용됩니다. 음수 값은 가장 높은 요소부터 인덱싱을 시작합니다. 예를 들어 `foo==[1,2,3]`이면 `foo[-1]==3`입니다. |
끝 | `end[i]`는 `end_mask`가 전체 범위를 결정하는 데 사용된다는 점을 제외하면 `begin`과 같습니다. |
큰 걸음 | `strides[i]`는 주어진 요소를 추출한 후 `i`번째 사양의 증분을 지정합니다. 음수 인덱스는 원래 순서를 반대로 합니다. out 또는 범위 값은 Slice[i]>0인 경우 `[0,dim[i])로 고정되고, Slice[i] < 0인 경우 `[-1,dim[i]-1]로 고정됩니다. |
옵션 | 선택적 속성 값을 전달합니다. |
보고
- StridedSlice의 새로운 인스턴스
공개 정적 StridedSlice.Options ellipsisMask (긴 ellipsisMask)
매개변수
줄임표마스크 | 'i' 비트가 1인 비트마스크는 'i' 번째 위치가 실제로 줄임표임을 의미합니다. 최대 1비트는 1일 수 있습니다. `ellipsis_mask == 0`인 경우 `1 << (m+1)`의 암시적 줄임표 마스크가 제공됩니다. 이는 `foo[3:5] == foo[3:5, ...]`를 의미합니다. 줄임표는 모든 차원에 대한 분할 범위를 완전히 지정하는 데 필요한 만큼의 범위 사양을 암시적으로 생성합니다. 예를 들어 4차원 텐서 `foo`의 경우 `foo[2, ..., 5:8]` 슬라이스는 `foo[2, :, :, 5:8]`을 의미합니다. |
---|
공개 정적 StridedSlice.Options newAxisMask (Long newAxisMask)
매개변수
newAxis마스크 | 'i' 비트가 1인 비트마스크는 'i'번째 사양이 새로운 도형 1 차원을 생성한다는 의미입니다. 예를 들어 `foo[:4, tf.newaxis, :2]`는 `(4, 1, 2)` 모양의 텐서를 생성합니다. |
---|
공개 정적 StridedSlice.Options ShrinkAxisMask (Long ShrinkAxisMask)
매개변수
수축축마스크 | 'i' 비트는 'i' 번째 사양이 차원을 축소해야 함을 의미하는 비트마스크입니다. 시작과 끝은 차원의 크기가 1인 조각을 의미해야 합니다. 예를 들어 Python에서는 `foo[:, 3, :]`를 수행하면 `shrink_axis_mask`가 2가 됩니다. |
---|