Home | History | Annotate | Download | only in c
      1 /* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
      2 
      3 Licensed under the Apache License, Version 2.0 (the "License");
      4 you may not use this file except in compliance with the License.
      5 You may obtain a copy of the License at
      6 
      7     http://www.apache.org/licenses/LICENSE-2.0
      8 
      9 Unless required by applicable law or agreed to in writing, software
     10 distributed under the License is distributed on an "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 See the License for the specific language governing permissions and
     13 limitations under the License.
     14 ==============================================================================*/
     15 #ifndef TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
     16 #define TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
     17 
     18 #include <stdint.h>
     19 
     20 #include "tensorflow/lite/c/c_api_internal.h"
     21 
     22 #ifdef __cplusplus
     23 extern "C" {
     24 #endif  // __cplusplus
     25 
     26 // TODO(aselle): Consider using "if this then that" for testing.
     27 
     28 // Useful placeholder to put in otherwise empty structs to avoid size warnings.
     29 typedef struct {
     30   char dummy;
     31 } EmptyStructPlaceholder;
     32 
     33 // IMPORTANT: All new members of structs must be added at the end to ensure
     34 // backwards compatibility.
     35 
     36 // Possible padding types (for convolutions)
     37 typedef enum {
     38   kTfLitePaddingUnknown = 0,
     39   kTfLitePaddingSame,
     40   kTfLitePaddingValid,
     41 } TfLitePadding;
     42 
     43 typedef enum {
     44   kTfLiteMirrorPaddingUnknown = 0,
     45   kTfLiteMirrorPaddingReflect,
     46   kTfLiteMirrorPaddingSymmetric,
     47 } TfLiteMirrorPaddingMode;
     48 
     49 typedef struct {
     50   int width;
     51   int height;
     52 } TfLitePaddingValues;
     53 
     54 typedef struct {
     55   TfLiteMirrorPaddingMode mode;
     56 } TfLiteMirrorPaddingParams;
     57 
     58 // Possible fused activation functions.
     59 // TODO(aselle): rename to TfLiteActivation
     60 typedef enum {
     61   kTfLiteActNone = 0,
     62   kTfLiteActRelu,
     63   kTfLiteActRelu1,
     64   kTfLiteActRelu6,
     65   kTfLiteActTanh,
     66   kTfLiteActSignBit,
     67   kTfLiteActSigmoid,
     68 } TfLiteFusedActivation;
     69 
     70 typedef struct {
     71   TfLitePadding padding;
     72   int stride_width;
     73   int stride_height;
     74   int dilation_width_factor;
     75   int dilation_height_factor;
     76   TfLiteFusedActivation activation;
     77 } TfLiteConvParams;
     78 
     79 typedef struct {
     80   TfLitePadding padding;
     81   int stride_width;
     82   int stride_height;
     83   int filter_width;
     84   int filter_height;
     85   TfLiteFusedActivation activation;
     86   struct {
     87     TfLitePaddingValues padding;
     88   } computed;
     89 } TfLitePoolParams;
     90 
     91 typedef struct {
     92   // Parameters for DepthwiseConv version 1 or above.
     93   TfLitePadding padding;
     94   int stride_width;
     95   int stride_height;
     96   int depth_multiplier;
     97   TfLiteFusedActivation activation;
     98   // Parameters for DepthwiseConv version 2 or above.
     99   int dilation_width_factor;
    100   int dilation_height_factor;
    101 } TfLiteDepthwiseConvParams;
    102 
    103 typedef struct {
    104   int rank;
    105   TfLiteFusedActivation activation;
    106 } TfLiteSVDFParams;
    107 
    108 typedef struct {
    109   TfLiteFusedActivation activation;
    110 } TfLiteRNNParams;
    111 
    112 typedef struct {
    113   bool time_major;
    114   TfLiteFusedActivation activation;
    115 } TfLiteSequenceRNNParams;
    116 
    117 typedef struct {
    118   bool time_major;
    119   TfLiteFusedActivation activation;
    120   bool merge_outputs;
    121 } TfLiteBidirectionalSequenceRNNParams;
    122 
    123 typedef enum {
    124   kTfLiteFullyConnectedWeightsFormatDefault = 0,
    125   kTfLiteFullyConnectedWeightsFormatShuffled4x16Int8 = 1,
    126 } TfLiteFullyConnectedWeightsFormat;
    127 
    128 typedef struct {
    129   // Parameters for FullyConnected version 1 or above.
    130   TfLiteFusedActivation activation;
    131 
    132   // Parameters for FullyConnected version 2 or above.
    133   TfLiteFullyConnectedWeightsFormat weights_format;
    134 } TfLiteFullyConnectedParams;
    135 
    136 typedef enum {
    137   kTfLiteLshProjectionUnknown = 0,
    138   kTfLiteLshProjectionSparse = 1,
    139   kTfLiteLshProjectionDense = 2,
    140 } TfLiteLSHProjectionType;
    141 
    142 typedef struct {
    143   TfLiteLSHProjectionType type;
    144 } TfLiteLSHProjectionParams;
    145 
    146 typedef struct {
    147   float beta;
    148 } TfLiteSoftmaxParams;
    149 
    150 typedef struct {
    151   int axis;
    152   TfLiteFusedActivation activation;
    153 } TfLiteConcatenationParams;
    154 
    155 typedef struct {
    156   TfLiteFusedActivation activation;
    157 } TfLiteAddParams;
    158 
    159 typedef struct {
    160   EmptyStructPlaceholder placeholder;
    161 } TfLiteSpaceToBatchNDParams;
    162 
    163 typedef struct {
    164   EmptyStructPlaceholder placeholder;
    165 } TfLiteBatchToSpaceNDParams;
    166 
    167 typedef struct {
    168   TfLiteFusedActivation activation;
    169 } TfLiteMulParams;
    170 
    171 typedef struct {
    172   TfLiteFusedActivation activation;
    173 } TfLiteSubParams;
    174 
    175 typedef struct {
    176   TfLiteFusedActivation activation;
    177 } TfLiteDivParams;
    178 
    179 typedef struct {
    180   TfLiteFusedActivation activation;
    181 } TfLiteL2NormParams;
    182 
    183 typedef struct {
    184   int radius;
    185   float bias;
    186   float alpha;
    187   float beta;
    188 } TfLiteLocalResponseNormParams;
    189 
    190 typedef enum {
    191   kTfLiteLSTMFullKernel = 0,
    192   kTfLiteLSTMBasicKernel
    193 } TfLiteLSTMKernelType;
    194 
    195 typedef struct {
    196   // Parameters for LSTM version 1.
    197   TfLiteFusedActivation activation;
    198   float cell_clip;
    199   float proj_clip;
    200 
    201   // Parameters for LSTM version 2.
    202   // kTfLiteLSTMBasicKernel is only supported in version 2 or above.
    203   TfLiteLSTMKernelType kernel_type;
    204 } TfLiteLSTMParams;
    205 
    206 typedef struct {
    207   // Parameters needed for the underlying LSTM.
    208   TfLiteFusedActivation activation;
    209   float cell_clip;
    210   float proj_clip;
    211 
    212   // If set to true then the first dimension is time, otherwise batch.
    213   bool time_major;
    214 } TfLiteUnidirectionalSequenceLSTMParams;
    215 
    216 typedef struct {
    217   // Parameters supported by version 1:
    218   // Parameters inherited for the LSTM kernel.
    219   TfLiteFusedActivation activation;
    220   float cell_clip;
    221   float proj_clip;
    222 
    223   // If true, store the outputs of both directions in the first output.
    224   bool merge_outputs;
    225 
    226   // Parameters supported by version 2:
    227   // If set to true then the first dimension is time, otherwise batch.
    228   bool time_major;
    229 } TfLiteBidirectionalSequenceLSTMParams;
    230 
    231 typedef struct {
    232   bool align_corners;
    233 } TfLiteResizeBilinearParams;
    234 
    235 typedef struct {
    236   bool align_corners;
    237 } TfLiteResizeNearestNeighborParams;
    238 
    239 typedef struct {
    240   EmptyStructPlaceholder placeholder;
    241 } TfLitePadParams;
    242 
    243 typedef struct {
    244   EmptyStructPlaceholder placeholder;
    245 } TfLitePadV2Params;
    246 
    247 typedef struct {
    248   // TODO(ahentz): We can't have dynamic data in this struct, at least not yet.
    249   // For now we will fix the maximum possible number of dimensions.
    250   int shape[8];
    251   int num_dimensions;
    252 } TfLiteReshapeParams;
    253 
    254 typedef struct {
    255   int ngram_size;
    256   int max_skip_size;
    257   bool include_all_ngrams;
    258 } TfLiteSkipGramParams;
    259 
    260 typedef struct {
    261   int block_size;
    262 } TfLiteSpaceToDepthParams;
    263 
    264 typedef struct {
    265   TfLiteType in_data_type;
    266   TfLiteType out_data_type;
    267 } TfLiteCastParams;
    268 
    269 typedef enum {
    270   kTfLiteCombinerTypeSum = 0,
    271   kTfLiteCombinerTypeMean = 1,
    272   kTfLiteCombinerTypeSqrtn = 2,
    273 } TfLiteCombinerType;
    274 
    275 typedef struct {
    276   TfLiteCombinerType combiner;
    277 } TfLiteEmbeddingLookupSparseParams;
    278 
    279 typedef struct {
    280   int axis;
    281 } TfLiteGatherParams;
    282 
    283 typedef struct {
    284   EmptyStructPlaceholder placeholder;
    285 } TfLiteTransposeParams;
    286 
    287 typedef struct {
    288   bool keep_dims;
    289 } TfLiteReducerParams;
    290 
    291 typedef struct {
    292   int num_splits;
    293 } TfLiteSplitParams;
    294 
    295 typedef struct {
    296   int num_splits;
    297 } TfLiteSplitVParams;
    298 
    299 typedef struct {
    300   // TODO(ahentz): We can't have dynamic data in this struct, at least not yet.
    301   // For now we will fix the maximum possible number of dimensions.
    302   int squeeze_dims[8];
    303   int num_squeeze_dims;
    304 } TfLiteSqueezeParams;
    305 
    306 typedef struct {
    307   int begin_mask;
    308   int end_mask;
    309   int ellipsis_mask;
    310   int new_axis_mask;
    311   int shrink_axis_mask;
    312 } TfLiteStridedSliceParams;
    313 
    314 typedef struct {
    315   TfLiteType output_type;
    316 } TfLiteArgMaxParams;
    317 
    318 typedef struct {
    319   TfLiteType output_type;
    320 } TfLiteArgMinParams;
    321 
    322 typedef struct {
    323   TfLitePadding padding;
    324   int stride_width;
    325   int stride_height;
    326 } TfLiteTransposeConvParams;
    327 
    328 typedef struct {
    329   bool validate_indices;
    330 } TfLiteSparseToDenseParams;
    331 
    332 typedef struct {
    333   TfLiteType out_type;
    334 } TfLiteShapeParams;
    335 
    336 typedef struct {
    337 } TfLiteRankParams;
    338 
    339 typedef struct {
    340   // Parameters supported by version 1:
    341   float min;
    342   float max;
    343   int num_bits;
    344 
    345   // Parameters supported by version 2:
    346   bool narrow_range;
    347 } TfLiteFakeQuantParams;
    348 
    349 typedef struct {
    350   int values_count;
    351   int axis;
    352 } TfLitePackParams;
    353 
    354 typedef struct {
    355   int axis;
    356 } TfLiteOneHotParams;
    357 
    358 typedef struct {
    359   int num;
    360   int axis;
    361 } TfLiteUnpackParams;
    362 
    363 typedef struct {
    364   float alpha;
    365 } TfLiteLeakyReluParams;
    366 
    367 typedef struct {
    368   TfLiteType index_out_type;
    369 } TfLiteUniqueParams;
    370 
    371 typedef struct {
    372   int seq_dim;
    373   int batch_dim;
    374 } TfLiteReverseSequenceParams;
    375 
    376 #ifdef __cplusplus
    377 }  // extern "C"
    378 #endif  // __cplusplus
    379 
    380 #endif  // TENSORFLOW_LITE_C_BUILTIN_OP_DATA_H_
    381