Ich möchte einen Weg, um die Präzision der Schwimmer in TensorFlow (ungefähr: die Mantisse zu kürzen) auf eine beliebige Anzahl von Bits innerhalb eines definierten vollen Bereichs zu reduzieren. Ich muss den Code nicht vollständig mit reduzierter Genauigkeit schreiben (wie tf.float16), sondern vielmehr mit einer Reihe von Operationen, die die Genauigkeit eines Tensors reduzieren und dabei den ursprünglichen Typ beibehalten (zB tf.float32).Wie simuliert man in TensorFlow Schwebekörper mit reduzierter Präzision?
Wenn beispielsweise der gesamte Bereich 0 bis 1 ist und die Genauigkeit 8 Bit beträgt, wird 0,1234 rund (0,1234 * 256)/256 = 0,125. Dies verwendet eine einfache Rundung.
Ich würde auch gerne statistische Rundung machen, wo die Wahrscheinlichkeit der Rundung in jeder Richtung proportional dazu ist, wie weit der Wert davon ist. Beispiel: 0,1234 * 256 = 31,5904, was in 59% der Fälle auf 32/256 und in 41% der Fälle auf 31/256 aufrundet.
Zusätzliche Frage: Wie man ein vorhandenes Diagramm nimmt und es ändert, um Rundung nach jeder Faltung hinzuzufügen?
Haben definieren können Sie lesen https://www.tensorflow.org/performance/quantization ? –
@OlivierMoindrot Ja, ich habe mir das angesehen, es scheint ein etwas anderer Anwendungsfall zu sein. Ich brauche eine beliebige Anzahl von Bits, nicht nur 8, und ich möchte nicht jeden OP in einem Graphen konvertieren. –
Okay, das war alles, was ich tun konnte, um Entschuldigung zu helfen! :) –