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:

  1. 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.
  2. 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 tensor input .
  • 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 tensor input .

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ề:

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
)