2017-01-10 5 views
3

ブログ投稿 "https://petewarden.com/2016/05/03/how-to-quantize-neural-networks-with-tensorflow/"によると、Tensorflowは値がレイヤに入る前に量子化されます。レイヤーで処理された後、値は逆量子化されます。 Tensorflowは、値を0から255の間で再スケーリングすることによって値を量子化するため、値を逆量子化するために "min"および "max"を保持する必要があります。Tensorflowはどのように量子化と逆量子化を行うのですか?

私は質問したい: 1. "量子化"演算の出力における "最小"と "最大"がどのように決定されるか?つまり、最小値と最大値を見つけて0と255に設定すると、畳み込みを行うときにデータのオーバーフローまたはアンダーフローが発生します。 2. "畳み込み"演算の出力における "最小"と "最大"がどのように決定されるか?重みと活性化の両方が量子化されているので、 "min"と "max"の2つのセットがあります。畳み込み演算はそれらを組み合わせて "min"と "max"の1組を形成しますか?

答えて

0

TensorFlowは、i.a.低精度マトリクス乗算のためのgemmlowp。 8ビット値が入力として使用されますが、中間結果は32ビット値です。これらの32ビット値は、結果を返す前に8ビットに変換されます。 https://github.com/google/gemmlowp/blob/master/doc/low-precision.mdから

:オーバーフローを避けるために

、我々は内部で8ビット以上の結果を蓄積し、そして最後に、我々は唯一のいくつかの重要な8ビットを保持します。

関連する問題