aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/lite/kernels/pad.cc
diff options
context:
space:
mode:
authorGravatar Suharsh Sivakumar <suharshs@google.com>2018-04-06 14:13:49 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-04-06 14:16:02 -0700
commit3745f2582daeae7a49a129e250cf0cc2d573924a (patch)
tree87f036afd0bd6ae32ac624d883adeac60a7e772a /tensorflow/contrib/lite/kernels/pad.cc
parent8413fb51307c0274ae4db31181c531de046eb309 (diff)
Pad support for quantized zero.
PiperOrigin-RevId: 191938267
Diffstat (limited to 'tensorflow/contrib/lite/kernels/pad.cc')
-rw-r--r--tensorflow/contrib/lite/kernels/pad.cc27
1 files changed, 17 insertions, 10 deletions
diff --git a/tensorflow/contrib/lite/kernels/pad.cc b/tensorflow/contrib/lite/kernels/pad.cc
index c29da3862e..4f9449a225 100644
--- a/tensorflow/contrib/lite/kernels/pad.cc
+++ b/tensorflow/contrib/lite/kernels/pad.cc
@@ -119,39 +119,46 @@ TfLiteStatus Eval(TfLiteContext* context, TfLiteNode* node) {
after_padding.push_back(paddings_data[idx * 2 + 1]);
}
-#define TF_LITE_PAD(type, scalar) \
+#define TF_LITE_PAD(type, scalar, pad_value) \
type::Pad(GetTensorData<scalar>(op_context.input), \
GetTensorDims(op_context.input), before_padding, after_padding, \
GetTensorData<scalar>(op_context.output), \
- GetTensorDims(op_context.output))
+ GetTensorDims(op_context.output), pad_value)
switch (op_context.input->type) {
case kTfLiteFloat32:
if (kernel_type == kReference) {
- TF_LITE_PAD(reference_ops, float);
+ TF_LITE_PAD(reference_ops, float, 0);
} else if (kernel_type == kGenericOptimized) {
- TF_LITE_PAD(optimized_ops, float);
+ TF_LITE_PAD(optimized_ops, float, 0);
}
break;
case kTfLiteUInt8:
+ // Quantized Pad requires that 0 is represented in the quantized range.
+ TF_LITE_ENSURE(context, op_context.output->params.zero_point >=
+ std::numeric_limits<uint8_t>::min());
+ TF_LITE_ENSURE(context, op_context.output->params.zero_point <=
+ std::numeric_limits<uint8_t>::max());
if (kernel_type == kReference) {
- TF_LITE_PAD(reference_ops, uint8_t);
+ TF_LITE_PAD(reference_ops, uint8_t,
+ op_context.output->params.zero_point);
} else if (kernel_type == kGenericOptimized) {
- TF_LITE_PAD(optimized_ops, uint8_t);
+ TF_LITE_PAD(optimized_ops, uint8_t,
+ op_context.output->params.zero_point);
}
break;
case kTfLiteInt32:
if (kernel_type == kReference) {
- TF_LITE_PAD(reference_ops, int32_t);
+ TF_LITE_PAD(reference_ops, int32_t, 0);
} else if (kernel_type == kGenericOptimized) {
- TF_LITE_PAD(optimized_ops, int32_t);
+ TF_LITE_PAD(optimized_ops, int32_t, 0);
}
break;
case kTfLiteInt64:
if (kernel_type == kReference) {
- TF_LITE_PAD(reference_ops, int64_t);
+ TF_LITE_PAD(reference_ops, int64_t, 0);
} else if (kernel_type == kGenericOptimized) {
- TF_LITE_PAD(optimized_ops, int64_t);
+ TF_LITE_PAD(optimized_ops, int64_t, 0);
}
break;
default: