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:

  1. 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.
  2. 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 tensor 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ề:

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
)