| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- /* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==============================================================================*/
- #ifndef TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
- #define TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
- #include <stdint.h>
- #include "tensorflow/lite/c/common.h"
- #ifdef __cplusplus
- extern "C" {
- #endif // __cplusplus
- // TfLiteReshapeParams can't have dynamic data so we fix the maximum possible
- // number of dimensions.
- #define TFLITE_RESHAPE_PARAMS_MAX_DIMENSION_COUNT 8
- // TODO(aselle): Consider using "if this then that" for testing.
- // Useful placeholder to put in otherwise empty structs to avoid size warnings.
- typedef struct {
- char dummy;
- } EmptyStructPlaceholder;
- // IMPORTANT: All new members of structs must be added at the end to ensure
- // backwards compatibility.
- // Possible padding types (for convolutions)
- typedef enum {
- kTfLitePaddingUnknown = 0,
- kTfLitePaddingSame,
- kTfLitePaddingValid,
- } TfLitePadding;
- typedef enum {
- kTfLiteMirrorPaddingUnknown = 0,
- kTfLiteMirrorPaddingReflect,
- kTfLiteMirrorPaddingSymmetric,
- } TfLiteMirrorPaddingMode;
- // TODO(b/130259536): We should move this out of builtin_op_data.
- typedef struct {
- int width;
- int height;
- int width_offset;
- int height_offset;
- } TfLitePaddingValues;
- typedef struct {
- TfLiteMirrorPaddingMode mode;
- } TfLiteMirrorPaddingParams;
- // Possible fused activation functions.
- // TODO(aselle): rename to TfLiteActivation
- typedef enum {
- kTfLiteActNone = 0,
- kTfLiteActRelu,
- kTfLiteActReluN1To1, // min(max(-1, x), 1)
- kTfLiteActRelu1 = kTfLiteActReluN1To1, // kTfLiteActRelu1 will be deprecated.
- kTfLiteActRelu6, // min(max(0, x), 6)
- kTfLiteActTanh,
- kTfLiteActSignBit,
- kTfLiteActSigmoid,
- } TfLiteFusedActivation;
- typedef struct {
- // Parameters for CONV_2D version 1.
- TfLitePadding padding;
- int stride_width;
- int stride_height;
- TfLiteFusedActivation activation;
- // Parameters for CONV_2D version 2.
- // Note: Version 2 supports dilation values not equal to 1.
- int dilation_width_factor;
- int dilation_height_factor;
- } TfLiteConvParams;
- typedef struct {
- TfLitePadding padding;
- int stride_width;
- int stride_height;
- int filter_width;
- int filter_height;
- TfLiteFusedActivation activation;
- struct {
- TfLitePaddingValues padding;
- } computed;
- } TfLitePoolParams;
- typedef struct {
- // Parameters for DepthwiseConv version 1 or above.
- TfLitePadding padding;
- int stride_width;
- int stride_height;
- // `depth_multiplier` is redundant. It's used by CPU kernels in
- // TensorFlow 2.0 or below, but ignored in versions above.
- //
- // The information can be deduced from the shape of input and the shape of
- // weights. Since the TFLiteConverter toolchain doesn't support partially
- // specified shapes, relying on `depth_multiplier` stops us from supporting
- // graphs with dynamic shape tensors.
- //
- // Note: Some of the delegates (e.g. NNAPI, GPU) are still relying on this
- // field.
- int depth_multiplier;
- TfLiteFusedActivation activation;
- // Parameters for DepthwiseConv version 2 or above.
- int dilation_width_factor;
- int dilation_height_factor;
- } TfLiteDepthwiseConvParams;
- typedef struct {
- int rank;
- TfLiteFusedActivation activation;
- // Parameter for SVDF version 4.
- bool asymmetric_quantize_inputs;
- } TfLiteSVDFParams;
- typedef struct {
- TfLiteFusedActivation activation;
- // Parameter for RNN version 3.
- bool asymmetric_quantize_inputs;
- } TfLiteRNNParams;
- typedef struct {
- bool time_major;
- TfLiteFusedActivation activation;
- // Parameter for Sequence RNN version 3.
- bool asymmetric_quantize_inputs;
- } TfLiteSequenceRNNParams;
- typedef struct {
- bool time_major;
- TfLiteFusedActivation activation;
- bool merge_outputs;
- // Parameter for Bidirectional RNN verison 3.
- bool asymmetric_quantize_inputs;
- } TfLiteBidirectionalSequenceRNNParams;
- typedef enum {
- kTfLiteFullyConnectedWeightsFormatDefault = 0,
- kTfLiteFullyConnectedWeightsFormatShuffled4x16Int8 = 1,
- } TfLiteFullyConnectedWeightsFormat;
- typedef struct {
- // Parameters for FullyConnected version 1 or above.
- TfLiteFusedActivation activation;
- // Parameters for FullyConnected version 2 or above.
- TfLiteFullyConnectedWeightsFormat weights_format;
- // Parameters for FullyConnected version 5 or above.
- // If set to true, then the number of dimensions in the input and the output
- // tensors are the same. Furthermore, all but the last dimension of the input
- // and output shapes will be equal.
- bool keep_num_dims;
- // Parameters for FullyConnected version 7 or above.
- // If set to true and the weights are quantized, then non constant inputs
- // are quantized at evaluation time with asymmetric quantization.
- bool asymmetric_quantize_inputs;
- } TfLiteFullyConnectedParams;
- typedef enum {
- kTfLiteLshProjectionUnknown = 0,
- kTfLiteLshProjectionSparse = 1,
- kTfLiteLshProjectionDense = 2,
- } TfLiteLSHProjectionType;
- typedef struct {
- TfLiteLSHProjectionType type;
- } TfLiteLSHProjectionParams;
- typedef struct {
- float beta;
- } TfLiteSoftmaxParams;
- typedef struct {
- int axis;
- TfLiteFusedActivation activation;
- } TfLiteConcatenationParams;
- typedef struct {
- TfLiteFusedActivation activation;
- // Parameter added for the version 4.
- bool pot_scale_int16;
- } TfLiteAddParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLiteSpaceToBatchNDParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLiteBatchToSpaceNDParams;
- typedef struct {
- bool adj_x;
- bool adj_y;
- } TfLiteBatchMatMulParams;
- typedef struct {
- TfLiteFusedActivation activation;
- } TfLiteMulParams;
- typedef struct {
- TfLiteFusedActivation activation;
- // Parameter added for the version 5.
- bool pot_scale_int16;
- } TfLiteSubParams;
- typedef struct {
- TfLiteFusedActivation activation;
- } TfLiteDivParams;
- typedef struct {
- TfLiteFusedActivation activation;
- } TfLiteL2NormParams;
- typedef struct {
- int radius;
- float bias;
- float alpha;
- float beta;
- } TfLiteLocalResponseNormParams;
- typedef enum {
- kTfLiteLSTMFullKernel = 0,
- kTfLiteLSTMBasicKernel
- } TfLiteLSTMKernelType;
- typedef struct {
- // Parameters for LSTM version 1.
- TfLiteFusedActivation activation;
- float cell_clip;
- float proj_clip;
- // Parameters for LSTM version 2.
- // kTfLiteLSTMBasicKernel is only supported in version 2 or above.
- TfLiteLSTMKernelType kernel_type;
- // Parameters for LSTM version 4.
- bool asymmetric_quantize_inputs;
- } TfLiteLSTMParams;
- typedef struct {
- // Parameters needed for the underlying LSTM.
- TfLiteFusedActivation activation;
- float cell_clip;
- float proj_clip;
- // If set to true then the first dimension is time, otherwise batch.
- bool time_major;
- // Parameter for unidirectional sequence RNN version 3.
- bool asymmetric_quantize_inputs;
- } TfLiteUnidirectionalSequenceLSTMParams;
- typedef struct {
- // Parameters supported by version 1:
- // Parameters inherited for the LSTM kernel.
- TfLiteFusedActivation activation;
- float cell_clip;
- float proj_clip;
- // If true, store the outputs of both directions in the first output.
- bool merge_outputs;
- // Parameters supported by version 2:
- // If set to true then the first dimension is time, otherwise batch.
- bool time_major;
- // Parameters supported by version 4:
- // If set to true, then hybrid ops use asymmetric quantization for inputs.
- bool asymmetric_quantize_inputs;
- } TfLiteBidirectionalSequenceLSTMParams;
- typedef struct {
- bool align_corners;
- // half_pixel_centers assumes pixels are of half the actual dimensions, and
- // yields more accurate resizes. Corresponds to the same argument for the
- // original TensorFlow op in TF2.0.
- bool half_pixel_centers;
- } TfLiteResizeBilinearParams;
- typedef struct {
- bool align_corners;
- bool half_pixel_centers;
- } TfLiteResizeNearestNeighborParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLitePadParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLitePadV2Params;
- typedef struct {
- // TODO(ahentz): We can't have dynamic data in this struct, at least not yet.
- // For now we will fix the maximum possible number of dimensions.
- int shape[TFLITE_RESHAPE_PARAMS_MAX_DIMENSION_COUNT];
- int num_dimensions;
- } TfLiteReshapeParams;
- typedef struct {
- int ngram_size;
- int max_skip_size;
- bool include_all_ngrams;
- } TfLiteSkipGramParams;
- typedef struct {
- int block_size;
- } TfLiteSpaceToDepthParams;
- typedef struct {
- int block_size;
- } TfLiteDepthToSpaceParams;
- typedef struct {
- TfLiteType in_data_type;
- TfLiteType out_data_type;
- } TfLiteCastParams;
- typedef enum {
- kTfLiteCombinerTypeSum = 0,
- kTfLiteCombinerTypeMean = 1,
- kTfLiteCombinerTypeSqrtn = 2,
- } TfLiteCombinerType;
- typedef struct {
- TfLiteCombinerType combiner;
- } TfLiteEmbeddingLookupSparseParams;
- typedef struct {
- int axis;
- } TfLiteGatherParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLiteTransposeParams;
- typedef struct {
- bool keep_dims;
- } TfLiteReducerParams;
- typedef struct {
- int num_splits;
- } TfLiteSplitParams;
- typedef struct {
- int num_splits;
- } TfLiteSplitVParams;
- typedef struct {
- // TODO(ahentz): We can't have dynamic data in this struct, at least not yet.
- // For now we will fix the maximum possible number of dimensions.
- int squeeze_dims[8];
- int num_squeeze_dims;
- } TfLiteSqueezeParams;
- typedef struct {
- int begin_mask;
- int end_mask;
- int ellipsis_mask;
- int new_axis_mask;
- int shrink_axis_mask;
- } TfLiteStridedSliceParams;
- typedef struct {
- TfLiteType output_type;
- } TfLiteArgMaxParams;
- typedef struct {
- TfLiteType output_type;
- } TfLiteArgMinParams;
- typedef struct {
- TfLitePadding padding;
- int stride_width;
- int stride_height;
- } TfLiteTransposeConvParams;
- typedef struct {
- bool validate_indices;
- } TfLiteSparseToDenseParams;
- typedef struct {
- TfLiteType out_type;
- } TfLiteShapeParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLiteRankParams;
- typedef struct {
- // Parameters supported by version 1:
- float min;
- float max;
- int num_bits;
- // Parameters supported by version 2:
- bool narrow_range;
- } TfLiteFakeQuantParams;
- typedef struct {
- int values_count;
- int axis;
- } TfLitePackParams;
- typedef struct {
- int axis;
- } TfLiteOneHotParams;
- typedef struct {
- int num;
- int axis;
- } TfLiteUnpackParams;
- typedef struct {
- float alpha;
- } TfLiteLeakyReluParams;
- typedef struct {
- TfLiteType index_out_type;
- } TfLiteUniqueParams;
- typedef struct {
- int seq_dim;
- int batch_dim;
- } TfLiteReverseSequenceParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLiteMatrixDiagParams;
- typedef struct {
- EmptyStructPlaceholder placeholder;
- } TfLiteMatrixSetDiagParams;
- typedef struct {
- int then_subgraph_index;
- int else_subgraph_index;
- } TfLiteIfParams;
- typedef struct {
- int cond_subgraph_index;
- int body_subgraph_index;
- } TfLiteWhileParams;
- #ifdef __cplusplus
- } // extern "C"
- #endif // __cplusplus
- #endif // TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
|