Home | History | Annotate | Download | only in tflite
      1 /* Copyright 2018 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 #include "tensorflow/lite/toco/tflite/whitelisted_flex_ops.h"
     16 
     17 #include <set>
     18 
     19 namespace toco {
     20 namespace tflite {
     21 
     22 bool IsWhitelistedFlexOp(const std::string& tensorflow_op_name) {
     23   static const std::set<std::string>* whitelisted_flex_ops =
     24       new std::set<std::string>({
     25           "Abort",
     26           "Abs",
     27           "Add",
     28           "AddN",
     29           "AddV2",
     30           "All",
     31           "Any",
     32           "ApplyAdadelta",
     33           "ApplyAdagrad",
     34           "ApplyAdagradDA",
     35           "ApplyAdam",
     36           "ApplyAdaMax",
     37           "ApplyAddSign",
     38           "ApplyCenteredRMSProp",
     39           "ApplyFtrl",
     40           "ApplyFtrlV2",
     41           "ApplyGradientDescent",
     42           "ApplyMomentum",
     43           "ApplyPowerSign",
     44           "ApplyProximalAdagrad",
     45           "ApplyProximalGradientDescent",
     46           "ApplyRMSProp",
     47           "ApproximateEqual",
     48           "_Arg",
     49           "ArgMax",
     50           "ArgMin",
     51           "_ArrayToList",
     52           "Assert",
     53           "Assign",
     54           "AssignAdd",
     55           "AssignSub",
     56           "AudioSpectrogram",
     57           "AvgPool",
     58           "AvgPool3D",
     59           "AvgPoolGrad",
     60           "BatchMatMul",
     61           "BatchNormWithGlobalNormalization",
     62           "BatchNormWithGlobalNormalizationGrad",
     63           "BatchToSpace",
     64           "BatchToSpaceND",
     65           "BiasAdd",
     66           "BiasAddGrad",
     67           "BiasAddV1",
     68           "BroadcastArgs",
     69           "BroadcastGradientArgs",
     70           "Cast",
     71           "Ceil",
     72           "CheckNumerics",
     73           "ComplexAbs",
     74           "Concat",
     75           "ConcatOffset",
     76           "ConcatV2",
     77           "ConjugateTranspose",
     78           "Const",
     79           "ControlTrigger",
     80           "Conv2D",
     81           "Conv2DBackpropFilter",
     82           "Conv2DBackpropInput",
     83           "Conv3D",
     84           "Cos",
     85           "Cosh",
     86           "CropAndResize",
     87           "CropAndResizeGradBoxes",
     88           "CropAndResizeGradImage",
     89           "CTCBeamSearchDecoder",
     90           "CTCGreedyDecoder",
     91           "DataFormatDimMap",
     92           "DataFormatVecPermute",
     93           "DebugGradientIdentity",
     94           "DebugGradientRefIdentity",
     95           "DecodeBmp",
     96           "DecodeWav",
     97           "DeleteSessionTensor",
     98           "DepthToSpace",
     99           "DepthwiseConv2dNative",
    100           "Dequantize",
    101           "DestroyTemporaryVariable",
    102           "Div",
    103           "DivNoNan",
    104           "DynamicPartition",
    105           "DynamicStitch",
    106           "Elu",
    107           "EluGrad",
    108           "EncodeWav",
    109           "EnsureShape",
    110           "Enter",
    111           "Equal",
    112           "Exit",
    113           "Exp",
    114           "ExpandDims",
    115           "FakeQuantWithMinMaxArgs",
    116           "FakeQuantWithMinMaxArgsGradient",
    117           "FakeQuantWithMinMaxVars",
    118           "FakeQuantWithMinMaxVarsGradient",
    119           "FakeQuantWithMinMaxVarsPerChannel",
    120           "FakeQuantWithMinMaxVarsPerChannelGradient",
    121           "FakeQueue",
    122           "FFT",
    123           "FFT2D",
    124           "FFT3D",
    125           "FIFOQueue",
    126           "FIFOQueueV2",
    127           "Fill",
    128           "Floor",
    129           "FloorDiv",
    130           "FloorMod",
    131           "FusedBatchNorm",
    132           "FusedBatchNormGrad",
    133           "FusedBatchNormGradV2",
    134           "FusedBatchNormV2",
    135           "FusedPadConv2D",
    136           "FusedResizeAndPadConv2D",
    137           "Gather",
    138           "GatherNd",
    139           "GatherV2",
    140           "GetSessionHandle",
    141           "GetSessionHandleV2",
    142           "GetSessionTensor",
    143           "Greater",
    144           "GreaterEqual",
    145           "_HostCast",
    146           "_HostRecv",
    147           "_HostSend",
    148           "Identity",
    149           "IdentityN",
    150           "IFFT",
    151           "IFFT2D",
    152           "IFFT3D",
    153           "IRFFT",
    154           "IRFFT2D",
    155           "IRFFT3D",
    156           "ImmutableConst",
    157           "InTopK",
    158           "InTopKV2",
    159           "Inv",
    160           "InvertPermutation",
    161           "InvGrad",
    162           "IsFinite",
    163           "IsNan",
    164           "IsVariableInitialized",
    165           "LeakyRelu",
    166           "LeakyReluGrad",
    167           "Less",
    168           "LessEqual",
    169           "LinSpace",
    170           "ListDiff",
    171           "_ListToArray",
    172           "Log",
    173           "LogicalAnd",
    174           "LogicalNot",
    175           "LogicalOr",
    176           "LogSoftmax",
    177           "LoopCond",
    178           "LRN",
    179           "MatMul",
    180           "Max",
    181           "Maximum",
    182           "MaxPool",
    183           "MaxPool3D",
    184           "MaxPoolGrad",
    185           "MaxPoolGradGrad",
    186           "MaxPoolGradGradV2",
    187           "MaxPoolGradV2",
    188           "MaxPoolGradWithArgmax",
    189           "MaxPoolV2",
    190           "MaxPoolWithArgmax",
    191           "Mean",
    192           "Merge",
    193           "MergeV2Checkpoints",
    194           "Mfcc",
    195           "Min",
    196           "Minimum",
    197           "MirrorPad",
    198           "MirrorPadGrad",
    199           "Mul",
    200           "Multinomial",
    201           "Neg",
    202           "NextIteration",
    203           "NonMaxSuppression",
    204           "NonMaxSuppressionV2",
    205           "NonMaxSuppressionV3",
    206           "NonMaxSuppressionV4",
    207           "NonMaxSuppressionWithOverlaps",
    208           "NoOp",
    209           "NotEqual",
    210           "OneHot",
    211           "OnesLike",
    212           "Pack",
    213           "Pad",
    214           "PaddingFIFOQueue",
    215           "PaddingFIFOQueueV2",
    216           "PadV2",
    217           "ParallelDynamicStitch",
    218           "ParseExample",
    219           "ParseSequenceExample",
    220           "ParseSingleExample",
    221           "ParseSingleSequenceExample",
    222           "Placeholder",
    223           "PlaceholderV2",
    224           "PlaceholderWithDefault",
    225           "Pow",
    226           "PreventGradient",
    227           "Print",
    228           "PrintV2",
    229           "Prod",
    230           "QuantizedAdd",
    231           "QuantizedAvgPool",
    232           "QuantizedBatchNormWithGlobalNormalization",
    233           "QuantizedBiasAdd",
    234           "QuantizedConcat",
    235           "QuantizedConv2D",
    236           "QuantizedInstanceNorm",
    237           "QuantizedMatMul",
    238           "QuantizedMaxPool",
    239           "QuantizedMul",
    240           "QuantizeDownAndShrinkRange",
    241           "QuantizedRelu",
    242           "QuantizedRelu6",
    243           "QuantizedReshape",
    244           "QuantizedResizeBilinear",
    245           "QuantizeV2",
    246           "QueueClose",
    247           "QueueCloseV2",
    248           "QueueDequeue",
    249           "QueueDequeueMany",
    250           "QueueDequeueManyV2",
    251           "QueueDequeueUpTo",
    252           "QueueDequeueUpToV2",
    253           "QueueDequeueV2",
    254           "QueueEnqueue",
    255           "QueueEnqueueMany",
    256           "QueueEnqueueManyV2",
    257           "QueueEnqueueV2",
    258           "QueueIsClosed",
    259           "QueueIsClosedV2",
    260           "QueueSize",
    261           "QueueSizeV2",
    262           "RandomGamma",
    263           "RandomStandardNormal",
    264           "RandomUniform",
    265           "RandomUniformInt",
    266           "Range",
    267           "Rank",
    268           "RealDiv",
    269           "Reciprocal",
    270           "ReciprocalGrad",
    271           "_Recv",
    272           "RefEnter",
    273           "RefExit",
    274           "RefIdentity",
    275           "RefMerge",
    276           "RefNextIteration",
    277           "RefSelect",
    278           "RefSwitch",
    279           "Relu",
    280           "Relu6",
    281           "Relu6Grad",
    282           "ReluGrad",
    283           "RemoteCall",
    284           "RequantizationRange",
    285           "Requantize",
    286           "Reshape",
    287           "ResizeBilinear",
    288           "ResizeBilinearGrad",
    289           "ResizeNearestNeighbor",
    290           "ResizeNearestNeighborGrad",
    291           "ResourceApplyAdadelta",
    292           "ResourceApplyAdagrad",
    293           "ResourceApplyAdagradDA",
    294           "ResourceApplyAdam",
    295           "ResourceApplyAdaMax",
    296           "ResourceApplyAddSign",
    297           "ResourceApplyCenteredRMSProp",
    298           "ResourceApplyFtrl",
    299           "ResourceApplyFtrlV2",
    300           "ResourceApplyGradientDescent",
    301           "ResourceApplyMomentum",
    302           "ResourceApplyPowerSign",
    303           "ResourceApplyProximalAdagrad",
    304           "ResourceApplyProximalGradientDescent",
    305           "ResourceApplyRMSProp",
    306           "ResourceSparseApplyAdadelta",
    307           "ResourceSparseApplyAdagrad",
    308           "ResourceSparseApplyAdagradDA",
    309           "ResourceSparseApplyCenteredRMSProp",
    310           "ResourceSparseApplyFtrl",
    311           "ResourceSparseApplyFtrlV2",
    312           "ResourceSparseApplyMomentum",
    313           "ResourceSparseApplyProximalAdagrad",
    314           "ResourceSparseApplyProximalGradientDescent",
    315           "ResourceSparseApplyRMSProp",
    316           "ResourceStridedSliceAssign",
    317           "Restore",
    318           "RestoreSlice",
    319           "RestoreV2",
    320           "_Retval",
    321           "Reverse",
    322           "ReverseSequence",
    323           "ReverseV2",
    324           "RFFT",
    325           "RFFT2D",
    326           "RFFT3D",
    327           "Round",
    328           "Rsqrt",
    329           "RsqrtGrad",
    330           "Save",
    331           "SaveSlices",
    332           "SaveV2",
    333           "SegmentMax",
    334           "SegmentMean",
    335           "SegmentMin",
    336           "SegmentProd",
    337           "SegmentSum",
    338           "Select",
    339           "Selu",
    340           "SeluGrad",
    341           "_Send",
    342           "Shape",
    343           "ShapeN",
    344           "ShardedFilename",
    345           "ShardedFilespec",
    346           "Sigmoid",
    347           "SigmoidGrad",
    348           "Sign",
    349           "Sin",
    350           "Sinh",
    351           "Size",
    352           "Slice",
    353           "Softmax",
    354           "SoftmaxCrossEntropyWithLogits",
    355           "Softplus",
    356           "SoftplusGrad",
    357           "Softsign",
    358           "SoftsignGrad",
    359           "SpaceToBatch",
    360           "SpaceToBatchND",
    361           "SpaceToDepth",
    362           "SparseApplyAdadelta",
    363           "SparseApplyAdagrad",
    364           "SparseApplyAdagradDA",
    365           "SparseApplyCenteredRMSProp",
    366           "SparseApplyFtrl",
    367           "SparseApplyFtrlV2",
    368           "SparseApplyMomentum",
    369           "SparseApplyProximalAdagrad",
    370           "SparseApplyProximalGradientDescent",
    371           "SparseApplyRMSProp",
    372           "SparseFillEmptyRows",
    373           "SparseFillEmptyRowsGrad",
    374           "SparseReshape",
    375           "SparseSegmentMean",
    376           "SparseSegmentMeanGrad",
    377           "SparseSegmentMeanWithNumSegments",
    378           "SparseSegmentSqrtN",
    379           "SparseSegmentSqrtNGrad",
    380           "SparseSegmentSqrtNWithNumSegments",
    381           "SparseSegmentSum",
    382           "SparseSegmentSumWithNumSegments",
    383           "SparseToDense",
    384           "Split",
    385           "SplitV",
    386           "Sqrt",
    387           "SqrtGrad",
    388           "Square",
    389           "SquaredDifference",
    390           "Squeeze",
    391           "Stack",
    392           "StackClose",
    393           "StackCloseV2",
    394           "StackPop",
    395           "StackPopV2",
    396           "StackPush",
    397           "StackPushV2",
    398           "StackV2",
    399           "StopGradient",
    400           "StridedSlice",
    401           "StridedSliceAssign",
    402           "StridedSliceGrad",
    403           "StringJoin",
    404           "Sub",
    405           "Sum",
    406           "Switch",
    407           "SymbolicGradient",
    408           "Tan",
    409           "Tanh",
    410           "TanhGrad",
    411           "TemporaryVariable",
    412           "TensorArray",
    413           "TensorArrayClose",
    414           "TensorArrayCloseV2",
    415           "TensorArrayCloseV3",
    416           "TensorArrayConcat",
    417           "TensorArrayConcatV2",
    418           "TensorArrayConcatV3",
    419           "TensorArrayGather",
    420           "TensorArrayGatherV2",
    421           "TensorArrayGatherV3",
    422           "TensorArrayGrad",
    423           "TensorArrayGradV2",
    424           "TensorArrayGradV3",
    425           "TensorArrayGradWithShape",
    426           "TensorArrayPack",
    427           "TensorArrayRead",
    428           "TensorArrayReadV2",
    429           "TensorArrayReadV3",
    430           "TensorArrayScatter",
    431           "TensorArrayScatterV2",
    432           "TensorArrayScatterV3",
    433           "TensorArraySize",
    434           "TensorArraySizeV2",
    435           "TensorArraySizeV3",
    436           "TensorArraySplit",
    437           "TensorArraySplitV2",
    438           "TensorArraySplitV3",
    439           "TensorArrayUnpack",
    440           "TensorArrayV2",
    441           "TensorArrayV3",
    442           "TensorArrayWrite",
    443           "TensorArrayWriteV2",
    444           "TensorArrayWriteV3",
    445           "Tile",
    446           "TileGrad",
    447           "Timestamp",
    448           "TopK",
    449           "TopKV2",
    450           "Transpose",
    451           "TruncateDiv",
    452           "TruncatedNormal",
    453           "Unique",
    454           "UniqueV2",
    455           "UniqueWithCounts",
    456           "UniqueWithCountsV2",
    457           "Unpack",
    458           "UnsortedSegmentMax",
    459           "UnsortedSegmentMin",
    460           "UnsortedSegmentProd",
    461           "UnsortedSegmentSum",
    462           "Variable",
    463           "VariableV2",
    464           "Where",
    465           "Xdivy",
    466           "Xlogy",
    467           "ZerosLike",
    468       });
    469   return whitelisted_flex_ops->find(tensorflow_op_name) !=
    470          whitelisted_flex_ops->end();
    471 }
    472 
    473 }  // namespace tflite
    474 }  // namespace toco
    475