tensorflow::ops::QuantizeAndDequantizeV2
#include <array_ops.h>Thực hiện quá trình lượng tử hóa rồi giải lượng tử hóa một tensor.
Bản tóm tắt
Thao tác này mô phỏng sự mất độ chính xác do quá trình truyền tiến được lượng tử hóa bằng cách:
- Lượng tử hóa tensor thành các số điểm cố định, sao cho chúng khớp với phương pháp lượng tử hóa mục tiêu khi được sử dụng trong suy luận.
- Việc chuyển đổi nó trở lại thành số thực dấu phẩy động cho các phép toán tiếp theo, rất có thể là phép nhân ma trận (matmul).
Có nhiều cách để lượng tử hóa. Phiên bản này chỉ sử dụng phép co giãn, vì vậy 0,0 tương ứng với 0.
Từ giá trị 'num_bits' được chỉ định trong kiểu đầu ra lượng tử hóa, nó xác định các giá trị lượng tử hóa tối thiểu và tối đa có thể biểu diễn được.
ví dụ
- [-128, 127] cho số có dấu, num_bits = 8, hoặc
- [0, 255] cho số nguyên không dấu, num_bits = 8.
Nếu range_given == False, các giá trị input_min, input_max ban đầu sẽ được xác định tự động là giá trị nhỏ nhất và lớn nhất trong tensor đầu vào, ngược lại, các giá trị input_min, input_max được chỉ định sẽ được sử dụng.
Lưu ý: Nếu input_min, input_max được chỉ định, chúng không nhất thiết phải bằng giá trị tối thiểu và tối đa thực tế trong tensor. Ví dụ, trong một số trường hợp, việc chỉ định các giá trị này có thể có lợi để cắt bớt các giá trị cực trị có xác suất thấp trong phân bố đầu vào.
Thao tác này xác định hệ số tỷ lệ tối đa sao cho phạm vi [input_min, input_max] ban đầu được ánh xạ đến một phạm vi nằm trong phạm vi lượng tử hóa có thể biểu diễn được.
Nó xác định tỷ lệ từ một trong hai giá trị input_min và input_max, sau đó cập nhật giá trị còn lại để tối đa hóa phạm vi biểu diễn được.
ví dụ
- Nếu đầu ra là số có dấu, num_bits = 8, [input_min, input_max] = [-10.0, 5.0]: nó sẽ sử dụng hệ số tỷ lệ là -128 / -10.0 = 12.8. Trong trường hợp này, nó sẽ cập nhật input_max thành 127 / 12.8 = 9.921875
- Nếu đầu ra là số có dấu, num_bits = 8, [input_min, input_max] = [-10.0, 10.0]: nó sẽ sử dụng hệ số tỷ lệ là 127 / 10.0 = 12.7. Trong trường hợp này, nó sẽ cập nhật input_min thành 128.0 / 12.7 = -10.07874
- Nếu đầu ra là số không dấu, input_min sẽ bị buộc bằng 0, và chỉ sử dụng input_max đã chỉ định.
Sau khi xác định hệ số tỷ lệ và cập nhật phạm vi đầu vào, nó sẽ áp dụng các bước sau cho từng giá trị trong tensor 'input'.
đầu ra = làm tròn(clamp(giá trị, đầu vào_min, đầu vào_max) * hệ số tỷ lệ) / hệ số tỷ lệ.
Hàm round ở trên làm tròn giá trị dựa trên tham số round_mode đã cho.
Luận điểm:
- phạm vi: Một đối tượng Phạm vi
- Đầu vào: Tensor cần lượng tử hóa rồi giải lượng tử hóa.
- input_min: Nếu
range_given == True, tham số này chỉ định giá trị đầu vào tối thiểu cần được biểu diễn, ngược lại, nó được xác định từ giá trị nhỏ nhất của tensorinput. - input_max: Nếu
range_given == True, tham số này chỉ định giá trị đầu vào tối đa cần được biểu diễn, ngược lại, nó được xác định từ giá trị tối đa của tensorinput.
Các thuộc tính tùy chọn (xem Attrs ):
- signed_input: Cho biết lượng tử hóa là có dấu hay không dấu. (thực ra tham số này đáng lẽ phải được gọi là
signed_output) - num_bits: Độ rộng bit của quá trình lượng tử hóa.
- range_given: Cho biết phạm vi đã được cung cấp hay cần được xác định từ tensor
input. - round_mode: Thuộc tính 'round_mode' kiểm soát thuật toán giải quyết trường hợp làm tròn trùng lặp khi làm tròn các giá trị float về dạng lượng tử hóa tương ứng. Hiện tại, các chế độ làm tròn sau được hỗ trợ:
- HALF_TO_EVEN: đây là chế độ làm tròn mặc định.
- HALF_UP: làm tròn về phía số dương. Ở chế độ này, 7,5 được làm tròn thành 8 và -7,5 được làm tròn thành -7.
- narrow_range: Nếu True, thì giá trị tuyệt đối của giá trị tối thiểu được lượng tử hóa sẽ bằng với giá trị tối đa được lượng tử hóa, thay vì lớn hơn 1. Ví dụ: đối với lượng tử hóa 8 bit, giá trị tối thiểu là -127 thay vì -128.
Trả về:
-
Output: Tensor đầu ra.
Hàm khởi tạo và hàm hủy | |
|---|---|
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max) | |
QuantizeAndDequantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input input_min, :: tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs) |
Thuộc tính công khai | |
|---|---|
operation | |
output | |
Chức năng công cộng | |
|---|---|
node () const | ::tensorflow::Node * |
operator::tensorflow::Input () const | |
operator::tensorflow::Output () const | |
Các hàm tĩnh công khai | |
|---|---|
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) | |
Cấu trúc | |
|---|---|
| tensorflow::ops::QuantizeAndDequantizeV2::Attrs | Các thiết lập thuộc tính tùy chọn cho QuantizeAndDequantizeV2 . |
Thuộc tính công khai
hoạt động
Operation operation
đầu ra
::tensorflow::Output output
Chức năng công cộng
Lượng tử hóa và giải lượng tử hóa V2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
Lượng tử hóa và giải lượng tử hóa V2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max, const QuantizeAndDequantizeV2::Attrs & attrs )
nút
::tensorflow::Node * node() const
operator::tensorflow::Input
operator::tensorflow::Input() const
operator::tensorflow::Output
operator::tensorflow::Output() const
Các hàm tĩnh công khai
Phạm vi hẹp
Attrs NarrowRange( bool x )
NumBits
Attrs NumBits( int64 x )
Phạm vi đã cho
Attrs RangeGiven( bool x )
Chế độ tròn
Attrs RoundMode( StringPiece x )
Đầu vào đã ký
Attrs SignedInput( bool x )