aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/lite/toco/model.h
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-04-10 15:01:49 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-04-10 15:04:15 -0700
commit99e198185d3a4a8bb089102b71b9fc3920427887 (patch)
tree5a17a65e135403319935354423a69d9feff2b3fd /tensorflow/contrib/lite/toco/model.h
parent02afb3d56e9270a9808693741b08c4fba997c3a2 (diff)
Add quantized LogSoftmax.
PiperOrigin-RevId: 192352432
Diffstat (limited to 'tensorflow/contrib/lite/toco/model.h')
-rw-r--r--tensorflow/contrib/lite/toco/model.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/tensorflow/contrib/lite/toco/model.h b/tensorflow/contrib/lite/toco/model.h
index 56ef9fe2a8..54c3a59506 100644
--- a/tensorflow/contrib/lite/toco/model.h
+++ b/tensorflow/contrib/lite/toco/model.h
@@ -1329,6 +1329,15 @@ struct SoftmaxOperator : Operator {
// TensorFlow equivalent: LogSoftmax
struct LogSoftmaxOperator : Operator {
LogSoftmaxOperator() : Operator(OperatorType::kLogSoftmax) {}
+
+ // LogSoftmax can in principal have very large negative output, depending on
+ // the input size. However, input x_i that is less than x_max-10 is
+ // accumulated as exp(x_i-x_max), which is truncated to zero.
+ //
+ // Since we effectively disregard smallish inputs in the normalizing factor,
+ // we also drop them in the output (set to minimum output), and in doing so
+ // make better use of the quantization range / resolution.
+ static constexpr float kOutputRangeMin = -16.0;
};
// Cast operator.
@@ -1522,7 +1531,7 @@ class Shape {
int dims(int i) const {
// Always check for out-of-bounds accesses, even in optimized builds where
// standard assertions are disabled. Out-of-bounds access here is a common
- // occurence.
+ // occurrence.
CHECK_GE(i, 0);
CHECK_GT(dims_.size(), i);
return dims_[i];