dòng chảy căng:: ôi:: Lượng tử hóaVàDequantizeV2
#include <array_ops.h>
Lượng tử hóa sau đó khử lượng tử một tensor.
Bản tóm tắt
Hoạt động này mô phỏng sự mất mát độ chính xác từ quá trình chuyển tiếp được lượng tử hóa bằng:
- Lượng tử hóa tensor thành các số điểm cố định, phải phù hợp với phương pháp lượng tử hóa mục tiêu khi nó được sử dụng trong suy luận.
- Giảm lượng tử hóa nó trở lại số dấu phẩy động cho các hoạt động sau, rất có thể là matmul.
Có nhiều cách khác nhau để định lượng. Phiên bản này chỉ sử dụng tỷ lệ, vì vậy 0,0 ánh xạ tới 0.
Từ 'num_bits' được chỉ định trong loại đầu ra được 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 thị.
ví dụ
- [-128, 127] đối với chữ ký, num_bits = 8 hoặc
- [0, 255] đối với dấu không dấu, num_bits = 8.
Nếu range_given == Sai thì input_min, input_max ban đầu sẽ được xác định tự động là giá trị tối thiểu và tối đa trong tensor đầu vào, nếu không thì các giá trị đã chỉ định của input_min, input_max sẽ được sử dụng.
Lưu ý: Nếu input_min, input_max được chỉ định, chúng không cần 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, có thể có ích nếu chỉ định các giá trị này sao cho các cực trị xác suất thấp của phân bố đầu vào được cắt bớt.
Op này xác định hệ số tỷ lệ tối đa sẽ ánh xạ phạm vi [input_min, input_max] ban đầu thành một phạm vi nằm trong phạm vi lượng tử hóa có thể biểu thị.
Nó xác định tỷ lệ từ một trong các input_min và input_max, sau đó cập nhật tỷ lệ còn lại để tối đa hóa phạm vi có thể biểu thị.
ví dụ
- nếu đầu ra được ký, 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 được ký, 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 không được ký, input_min buộc phải 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ó áp dụng thông số sau cho từng giá trị trong tenxơ 'đầu vào'.
đầu ra = round(kẹp(giá trị, input_min, input_max) *scale_factor)/scale_factor.
Hàm làm tròn ở trên làm tròn giá trị dựa trên round_mode đã cho.
Lập luận:
- phạm vi: Một đối tượng Phạm vi
- đầu vào: Tensor để lượng tử hóa và sau đó giải lượng tử hóa.
- input_min: Nếu
range_given == True
, giá trị này chỉ định giá trị đầu vào tối thiểu cần được biểu thị, nếu không, giá trị này được xác định từ giá trị tối thiểu của tenxơinput
. - input_max: Nếu
range_given == True
, giá trị này chỉ định giá trị đầu vào tối đa cần được biểu thị, nếu không, giá trị này được xác định từ giá trị tối đa của tenxơinput
.
Thuộc tính tùy chọn (xem Attrs
):
- signature_input: Lượng tử hóa được ký hay chưa ký. (thực ra tham số này đáng lẽ phải được gọi là
signed_output
) - num_bits: Độ rộng bit của lượng tử hóa.
- phạm vi_given: Phạm vi được đưa ra hay nên được xác định từ tensor
input
. - round_mode: Thuộc tính 'round_mode' kiểm soát thuật toán làm tròn liên kết được sử dụng khi làm tròn các giá trị float thành giá trị tương đương được lượng tử hóa của chúng. Các chế độ làm tròn sau đây hiện được hỗ trợ:
- HALF_TO_EVEN: đây là round_mode mặc định.
- HALF_UP: làm tròn về phía dương. Ở chế độ này, 7,5 làm tròn lên thành 8 và -7,5 làm tròn lên -7.
- phạm vi hẹp: Nếu đúng thì giá trị tuyệt đối của giá trị tối thiểu được lượng tử hóa sẽ giống với giá trị tối đa được lượng tử hóa, thay vì lớn hơn 1. tức là đối với lượng tử hóa 8 bit, giá trị tối thiểu là -127 thay vì -128.
- trục: Nếu được chỉ định, trục này được coi là trục kênh hoặc lát cắt và phạm vi lượng tử hóa riêng biệt được sử dụng cho mỗi kênh hoặc lát cắt dọc theo trục này.
Trả về:
-
Output
: Tenxor đầu ra.
Hàm 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 | |
---|---|
Axis (int64 x) | |
NarrowRange (bool x) | |
NumBits (int64 x) | |
RangeGiven (bool x) | |
RoundMode (StringPiece x) | |
SignedInput (bool x) |
Cấu trúc | |
---|---|
tensorflow:: ops:: QuantizeAndDequantizeV2:: Attrs | Bộ cài đặt 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óaVàDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
Lượng tử hóaVàDequantizeV2
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
toán tử::tenorflow::Đầu vào
operator::tensorflow::Input() const
toán tử::tenorflow::Đầu ra
operator::tensorflow::Output() const
Các hàm tĩnh công khai
Trục
Attrs Axis( int64 x )
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 )
Đã kýĐầu vào
Attrs SignedInput( bool x )