Bump FULLY_CONNECTED's supported version to v9.
New options and features introduced between v4 and v9:
v5: keep_num_dims: Not supported. Added check to FullyConnectedOperationParser to explicitly fail when flag is set.
v6: No bias provided: Was already supported in GPU, but the versioning not allowed to run these models.
v7: INT16 input/output. Integer input/output tensors are not supported.
v8: sparse_weight: Sparsity is not supported. Added check to ObjectReader::ReadTensor to reject sparse tensors.
v9: asymmetric_quantize_inputs: Controls on-the-fly quantization behavior with hybrid quant. Not relevant for GPU, as all operations are in floating-point.
PiperOrigin-RevId: 343320830
Change-Id: I4198173a83f1063099df18f531c478208f3594a6
diff --git a/tensorflow/lite/delegates/gpu/common/model_builder.cc b/tensorflow/lite/delegates/gpu/common/model_builder.cc
index ec39dbd..e21e287 100644
--- a/tensorflow/lite/delegates/gpu/common/model_builder.cc
+++ b/tensorflow/lite/delegates/gpu/common/model_builder.cc
@@ -858,7 +858,7 @@
absl::Status IsSupported(const TfLiteContext* context,
const TfLiteNode* tflite_node,
const TfLiteRegistration* registration) final {
- RETURN_IF_ERROR(CheckMaxSupportedOpVersion(registration, 4));
+ RETURN_IF_ERROR(CheckMaxSupportedOpVersion(registration, 9));
const TfLiteFullyConnectedParams* tf_options;
RETURN_IF_ERROR(RetrieveBuiltinData(tflite_node, &tf_options));
if (tf_options->weights_format !=
@@ -870,6 +870,10 @@
return absl::UnimplementedError(
"FullyConnected doesn't support more than 2 runtime inputs.");
}
+ if (tf_options->keep_num_dims == true) {
+ return absl::UnimplementedError(
+ "FullyConnected doesn't support keep_num_dims.");
+ }
// TODO(eignasheva): check input shape
return absl::OkStatus();
}
diff --git a/tensorflow/lite/delegates/gpu/common/object_reader.h b/tensorflow/lite/delegates/gpu/common/object_reader.h
index 3c7d7f6..71f4a52 100644
--- a/tensorflow/lite/delegates/gpu/common/object_reader.h
+++ b/tensorflow/lite/delegates/gpu/common/object_reader.h
@@ -71,6 +71,9 @@
}
const TfLiteTensor* tflite_tensor = context_->tensors + tensor_idx;
+ if (tflite_tensor->sparsity != nullptr) {
+ return absl::InvalidArgumentError("Sparsity is not supported on GPU.");
+ }
t->data.resize(NumElements(tflite_tensor));
RETURN_IF_ERROR(CreateVectorCopyData(*tflite_tensor, &t->data[0]));