Sải bướcLát

lớp cuối cùng công khai StridedSlice

Trả về một lát cắt có sải bước từ `input`.

Lưu ý, hầu hết người dùng python sẽ muốn sử dụng Python `Tensor.__getitem__` hoặc `Variable.__getitem__` thay vì trực tiếp tùy chọn này.

Mục tiêu của hoạt động này là tạo ra một tensor mới với một tập hợp con các phần tử từ tensor `n` chiều `input`. Tập hợp con được chọn bằng cách sử dụng một chuỗi các đặc tả phạm vi thưa thớt `m` được mã hóa thành các đối số của hàm này. Lưu ý, trong một số trường hợp `m` có thể bằng `n`, nhưng trường hợp này không nhất thiết phải như vậy. Mỗi mục nhập đặc tả phạm vi có thể là một trong những mục sau:

- Dấu chấm lửng (…). Hình elip được sử dụng để ngụ ý không hoặc nhiều kích thước của lựa chọn kích thước đầy đủ và được tạo bằng cách sử dụng `ellipsis_mask`. Ví dụ: `foo[...]` là phần nhận dạng.

- Một trục mới. Cái này được sử dụng để chèn một hình dạng mới=1 chiều và được tạo bằng `new_axis_mask`. Ví dụ: `foo[:, ...]` trong đó `foo` có hình dạng `(3, 4)` tạo ra một tenxơ `(1, 3, 4)`.

- Một phạm vi `bắt đầu:kết thúc:sải bước`. Điều này được sử dụng để chỉ định số lượng cần chọn từ một thứ nguyên nhất định. `stride` có thể là bất kỳ số nguyên nào nhưng 0. `begin` là một số nguyên biểu thị chỉ mục của giá trị đầu tiên cần chọn trong khi `end` đại diện cho chỉ mục của giá trị cuối cùng cần chọn. Số giá trị được chọn trong mỗi thứ nguyên là `end -begin` nếu `sải bước > 0` và `bắt đầu - kết thúc` nếu `sải bước < 0`. `begin` và `end` có thể âm trong đó `-1` là phần tử cuối cùng, `-2` là phần tử thứ hai ở cuối. `begin_mask` kiểm soát xem có thay thế `bắt đầu` được đưa ra rõ ràng bằng giá trị hiệu dụng ngầm định là `0` nếu `sải bước > 0` và `-1` nếu `sải bước < 0` hay không. `end_mask` tương tự nhưng tạo ra số cần thiết để tạo khoảng mở lớn nhất. Ví dụ: cho một hình dạng `(3,)` tensor `foo[:]`, `begin` và `end` hiệu dụng là `0` và `3`. Đừng cho rằng điều này tương đương với `foo[0:-1]` có `bắt đầu` và `kết thúc` hiệu quả là `0` và `2`. Một ví dụ khác là `foo[-2::-1]` đảo ngược chiều thứ nhất của một tensor trong khi loại bỏ hai chiều cuối cùng (theo các phần tử thứ tự ban đầu). Ví dụ `foo = [1,2,3,4]; foo[-2::-1]` là `[4,3]`.

- Một chỉ số duy nhất. Điều này được sử dụng để chỉ giữ lại các phần tử có chỉ mục nhất định. Ví dụ: (`foo[2, :]` trên một tenxơ hình dạng `(5,6)` tạo ra một tenxơ hình dạng `(6,)`. Điều này được mã hóa trong `begin` và `end` và `shrink_axis_mask`.

Mỗi đặc tả phạm vi khái niệm được mã hóa trong đối số của op. Cách mã hóa này được hiểu rõ nhất bằng cách xem xét một ví dụ không tầm thường. Cụ thể, `foo[1, 2:4, None, ..., :-3:-1, :]` sẽ được mã hóa thành

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
 
Trong trường hợp này nếu `foo.shape` là (5, 5, 5, 5, 5, 5), hình dạng cuối cùng của lát cắt sẽ trở thành (2, 1, 5, 5, 2, 5). Chúng ta hãy đi từng bước qua từng đặc tả đối số.

1. Đối số đầu tiên trong lát ví dụ được chuyển thành `begin = 1` và `end =begin + 1 = 2`. Để phân biệt với thông số ban đầu `2:4`, chúng tôi cũng đặt bit thích hợp trong `shrink_axis_mask`.

2. `2:4` đóng góp 2, 4, 1 để bắt đầu, kết thúc và sải bước. Tất cả các mặt nạ đều có đóng góp bằng 0 bit.

3. Không có từ nào đồng nghĩa với `tf.newaxis`. Điều này có nghĩa là chèn kích thước có kích thước 1 chiều vào hình dạng cuối cùng. Các giá trị giả được đóng góp để bắt đầu, kết thúc và sải bước, trong khi bit new_axis_mask được đặt.

4. `...` lấy toàn bộ phạm vi từ nhiều chiều nếu cần để chỉ định đầy đủ một lát cắt cho mọi chiều của hình dạng đầu vào.

5. `:-3:-1` hiển thị việc sử dụng các chỉ số âm. Chỉ mục phủ định `i` được liên kết với thứ nguyên có hình dạng `s` được chuyển đổi thành chỉ mục dương `s + i`. Vì vậy `-1` trở thành `s-1` (tức là phần tử cuối cùng). Việc chuyển đổi này được thực hiện nội bộ nên các bước bắt đầu, kết thúc và các bước nhận được x, -3 và -1. Bit Begin_mask thích hợp được đặt để cho biết phạm vi bắt đầu là phạm vi đầy đủ (bỏ qua x).

6. `:` chỉ ra rằng toàn bộ nội dung của kích thước tương ứng đã được chọn. Điều này tương đương với `::` hoặc `0::1`. bắt đầu, kết thúc và sải chân lần lượt nhận được 0, 0 và 1. Các bit thích hợp trong `begin_mask` và `end_mask` cũng được đặt.

Yêu cầu : `0 != sải bước[i] for i in [0, m)` `ellipsis_mask phải là lũy thừa của hai (chỉ một dấu chấm lửng)`

Các lớp lồng nhau

lớp học StridedSlice.Options Thuộc tính tùy chọn cho StridedSlice

Phương pháp công khai

Đầu ra <T>
asOutput ()
Trả về phần điều khiển tượng trưng của một tenxơ.
StridedSlice.Options tĩnh
BeginMask (Mặt nạ bắt đầu dài)
tĩnh <T, U mở rộng Số> StridedSlice <T>
tạo ( Phạm vi phạm vi , Đầu vào toán hạng <T>, Bắt đầu toán hạng <U>, Kết thúc toán hạng <U>, Bước tiến của toán hạng <U>, Tùy chọn... tùy chọn)
Phương thức xuất xưởng để tạo một lớp bao bọc một thao tác StridedSlice mới.
StridedSlice.Options tĩnh
EllipsisMask (Mặt nạ dấu chấm lửng dài)
StridedSlice.Options tĩnh
endMask (Mặt nạ cuối dài)
StridedSlice.Options tĩnh
newAxisMask (Mặt nạ trục mới dài)
Đầu ra <T>
StridedSlice.Options tĩnh
thu nhỏAxisMask (Thu nhỏAxisMask dài)

Phương pháp kế thừa

Phương pháp công khai

Đầu ra công khai <T> asOutput ()

Trả về phần điều khiển tượng trưng của một tenxơ.

Đầu vào của các hoạt động TensorFlow là đầu ra của một hoạt động TensorFlow khác. Phương pháp này được sử dụng để thu được một thẻ điều khiển mang tính biểu tượng đại diện cho việc tính toán đầu vào.

công khai StridedSlice.Options BeginMask (Mặt nạ bắt đầu dài)

Thông số
mặt nạ bắt đầu một bitmask trong đó bit i bằng 1 có nghĩa là bỏ qua giá trị bắt đầu và thay vào đó sử dụng khoảng lớn nhất có thể. Khi bắt đầu thời gian chạy[i] sẽ được thay thế bằng `[0, n-1)` nếu `sải bước[i] > 0` hoặc `[-1, n-1]` nếu `sải bước[i] < 0`

public static StridedSlice <T> tạo ( Phạm vi phạm vi , đầu vào Toán hạng <T>, Bắt đầu Toán hạng <U>, Kết thúc Toán tử <U>, Các bước của Toán tử <U>, Tùy chọn... tùy chọn)

Phương thức xuất xưởng để tạo một lớp bao bọc một thao tác StridedSlice mới.

Thông số
phạm vi phạm vi hiện tại
bắt đầu `begin[k]` chỉ định phần bù vào đặc tả phạm vi thứ `k`. Kích thước chính xác tương ứng với điều này sẽ được xác định theo ngữ cảnh. Các giá trị ngoài giới hạn sẽ được âm thầm kẹp lại. Nếu `k`bit thứ của `begin_mask` thì `begin[k]` bị bỏ qua và thay vào đó, toàn bộ phạm vi kích thước thích hợp sẽ được sử dụng. Các giá trị âm khiến việc lập chỉ mục bắt đầu từ phần tử cao nhất, ví dụ: Nếu `foo==[1,2,3]` thì `foo[-1]==3`.
kết thúc `end[i]` giống như `begin` ngoại trừ `end_mask` được sử dụng để xác định phạm vi đầy đủ.
bước tiến `strides[i]` chỉ định mức tăng trong đặc tả thứ `i` sau khi trích xuất một phần tử nhất định. Chỉ số âm sẽ đảo ngược thứ tự ban đầu. Các giá trị ngoài hoặc phạm vi được giới hạn ở `[0,dim[i]) if slice[i]>0` hoặc `[-1,dim[i]-1] if slice[i] < 0`
tùy chọn mang các giá trị thuộc tính tùy chọn
Trả lại
  • một phiên bản mới của StridedSlice

tĩnh công khai StridedSlice.Options ellipsisMask (Dấu chấm lửng dài)

Thông số
dấu ba chấmMặt nạ một mặt nạ bit trong đó bit `i` là 1 có nghĩa là vị trí thứ `i thực sự là dấu chấm lửng. Tối đa một bit có thể là 1. Nếu `ellipsis_mask == 0`, thì một mặt nạ dấu chấm lửng ẩn `1 << (m+1)` được cung cấp. Điều này có nghĩa là `foo[3:5] == foo[3:5, ...]`. Dấu ba chấm ngầm tạo ra nhiều thông số kỹ thuật phạm vi cần thiết để chỉ định đầy đủ phạm vi được cắt lát cho mọi thứ nguyên. Ví dụ: đối với tensor 4 chiều `foo` lát cắt `foo[2, ..., 5:8]` ngụ ý `foo[2, :, :, 5:8]`.

tĩnh công khai StridedSlice.Options endMask (Long endMask)

Thông số
mặt nạ cuối tương tự như `begin_mask`

công khai StridedSlice.Options newAxisMask (Long newAxisMask)

Thông số
mặt nạ trục mới một mặt nạ bit trong đó bit `i` là 1 có nghĩa là đặc tả thứ `i tạo ra hình dạng 1 chiều mới. Ví dụ: `foo[:4, tf.newaxis, :2]` sẽ tạo ra một tensor hình dạng `(4, 1, 2)`.

Đầu ra công khai đầu ra <T> ()

tĩnh công khai StridedSlice.Options thu nhỏAxisMask (Thu nhỏAxisMask dài)

Thông số
thu nhỏAxisMask một mặt nạ bit trong đó bit `i` ngụ ý rằng đặc tả thứ `i` sẽ thu nhỏ kích thước. bắt đầu và kết thúc phải ngụ ý một lát có kích thước 1 trong thứ nguyên. Ví dụ: trong python người ta có thể thực hiện `foo[:, 3, :]` điều này sẽ dẫn đến `shrink_axis_mask` là 2.