| 713 | }; |
| 714 | |
| 715 | class MaxPool : public BuiltinOperator<MaxPoolOperator, ::tflite::Pool2DOptions, |
| 716 | ::tflite::BuiltinOptions_Pool2DOptions> { |
| 717 | public: |
| 718 | using BuiltinOperator::BuiltinOperator; |
| 719 | flatbuffers::Offset<TfLiteOptions> WriteOptions( |
| 720 | const TocoOperator& op, |
| 721 | flatbuffers::FlatBufferBuilder* builder) const override { |
| 722 | auto padding = Padding::Serialize(op.padding.type); |
| 723 | auto activation_function = |
| 724 | ActivationFunction::Serialize(op.fused_activation_function); |
| 725 | return ::tflite::CreatePool2DOptions(*builder, padding, op.stride_width, |
| 726 | op.stride_height, op.kwidth, |
| 727 | op.kheight, activation_function); |
| 728 | } |
| 729 | |
| 730 | void ReadOptions(const TfLiteOptions& options, |
| 731 | TocoOperator* op) const override { |
| 732 | op->padding.type = Padding::Deserialize(options.padding()); |
| 733 | op->stride_width = options.stride_w(); |
| 734 | op->stride_height = options.stride_h(); |
| 735 | op->kwidth = options.filter_width(); |
| 736 | op->kheight = options.filter_height(); |
| 737 | op->fused_activation_function = |
| 738 | ActivationFunction::Deserialize(options.fused_activation_function()); |
| 739 | } |
| 740 | |
| 741 | int GetVersion(const OperatorSignature& op_signature) const override { |
| 742 | const string& input_name = op_signature.op->inputs[0]; |
| 743 | const Array& input_array = op_signature.model->GetArray(input_name); |
| 744 | if (input_array.data_type == ArrayDataType::kInt8) { |
| 745 | return 2; |
| 746 | } |
| 747 | return 1; |
| 748 | } |
| 749 | }; |
| 750 | |
| 751 | class Maximum : public SimpleOperator<TensorFlowMaximumOperator> { |
| 752 | public: |
no outgoing calls
no test coverage detected