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:

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

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
)