dòng chảy :: hoạt động :: QuantizeAndDequantizeV2
#include <array_ops.h>
Lượng tử hóa sau đó dequantizing một tensor.
Tóm lược
Op này mô phỏng sự mất độ chính xác từ chuyển tiếp lượng tử hóa qua:
- 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.
- Dequantizing 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 để lượng tử hóa. Phiên bản này chỉ sử dụng tỷ lệ, vì vậy 0,0 ánh xạ thành 0.
Từ 'num_bits' được chỉ định trong loại đầ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.
ví dụ
- [-128, 127] cho đã ký, num_bits = 8 hoặc
- [0, 255] cho chưa dấu, num_bits = 8.
Nếu range_given == False, input_min, input_max ban đầu sẽ được xác định tự động làm giá trị tối thiểu và lớn nhất trong tensor đầu vào, nếu không, các giá trị được chỉ định của input_min, input_max đượ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à lớn nhất thực tế trong tensor. ví dụ trong một số trường hợp, có thể có lợi khi 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 phối đầu vào bị cắt bớt.
Op này xác định scale_factor 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 diễn.
Nó xác định quy mô từ một trong input_min và input_max, sau đó cập nhật cái kia để tối đa hóa phạm vi có thể biểu diễn.
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ố scale 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 scale_factor 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ó dấu, input_min buộc phải bằng 0 và chỉ input_max được chỉ định mới được sử dụng.
Sau khi xác định scale_factor và cập nhật phạm vi đầu vào, nó sẽ áp dụng như sau cho từng giá trị trong tensor 'đầu vào'.
output = round (kẹp (giá trị, input_min, input_max) * scale_factor) / scale_factor.
Hàm round trên làm tròn giá trị dựa trên round_mode đã cho.
Tranh luận:
- phạm vi: Một đối tượng Phạm vi
- input: Tensor để lượng tử hóa và sau đó dequantize.
- 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 diễn, nếu không nó được xác định từ giá trị nhỏ nhất của tensorinput
. - input_max: Nếu
range_given == True
, giá trị này chỉ định giá trị đầu vào lớn nhất cần được biểu diễn, nếu không nó được xác định từ giá trị lớn nhất của tensorinput
.
Các thuộc tính tùy chọn (xem Phần Attrs
):
- sign_input: Lượng tử hóa được ký hay chưa ký. (thực ra tham số này nên được gọi là
signed_output
) - num_bits: Độ rộng bit của lượng tử hóa.
- range_given: Cho dù phạm vi được cung cấp hoặc phải được xác định từ tensor
input
. - round_mode: Thuộc tính 'round_mode' kiểm soát thuật toán ngắt kết nối làm tròn nào được sử dụng khi làm tròn các giá trị float thành các giá trị tương đương được lượng tử hóa của chúng. Các chế độ làm tròn sau hiện được hỗ trợ:
- HALF_TO_EVEN: đây là round_mode mặc định.
- HALF_UP: vòng về phía tích cực. Trong chế độ này, 7,5 vòng lên đến 8 và -7,5 vòng lên đến -7.
- phạm vi hẹp: Nếu Đúng, thì giá trị tuyệt đối của giá trị nhỏ nhất đã lượng tử hóa bằng giá trị lớn nhất đã lượng tử hóa, thay vì 1 giá trị lớn hơn. tức là đối với lượng tử hóa 8 bit, giá trị nhỏ nhất là -127 thay vì -128.
- trục: Nếu được chỉ định, trục này được coi là kênh hoặc trục lát cắt và phạm vi lượng tử hóa riêng biệt được sử dụng cho từng kênh hoặc lát dọc theo trục này.
Lợi nhuận:
-
Output
: Bộ căng đầu ra.
Người xây dựng và Người phá 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 chức năng 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ộ 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
QuantizeAndDequantizeV2
QuantizeAndDequantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input input_min, ::tensorflow::Input input_max )
QuantizeAndDequantizeV2
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ử :: tensorflow :: Đầu vào
operator::tensorflow::Input() const
toán tử :: tensorflow :: Đầu ra
operator::tensorflow::Output() const
Các chức năng 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 )
RangeGiven
Attrs RangeGiven( bool x )
RoundMode
Attrs RoundMode( StringPiece x )
Đã ký tên
Attrs SignedInput( bool x )