MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / ResizeOutputTensors

Function ResizeOutputTensors

tensorflow/lite/kernels/split_v.cc:58–119  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

56}
57
58TfLiteStatus ResizeOutputTensors(TfLiteContext* context, TfLiteNode* node,
59 const TfLiteTensor* input,
60 const TfLiteTensor* size_splits,
61 const TfLiteTensor* axis) {
62 int axis_value = GetTensorData<int>(axis)[0];
63 if (axis_value < 0) {
64 axis_value += NumDimensions(input);
65 }
66
67 std::vector<int64_t> size_splits_vector;
68 if (size_splits->type == kTfLiteInt32) {
69 GetSizeSplitsVector<int32_t>(size_splits, &size_splits_vector);
70 } else if (size_splits->type == kTfLiteInt64) {
71 GetSizeSplitsVector<int64_t>(size_splits, &size_splits_vector);
72 } else {
73 context->ReportError(context, "size_splits only support type int32|int64.");
74 return kTfLiteError;
75 }
76
77 int minus_one_index = -1;
78 int64_t size_splits_sum = 0;
79
80 for (int i = 0; i < size_splits_vector.size(); ++i) {
81 if (size_splits_vector.at(i) == -1) {
82 if (minus_one_index == -1) {
83 minus_one_index = i;
84 } else {
85 context->ReportError(context,
86 "The size_splits contains more than one -1.");
87 }
88 } else {
89 size_splits_sum += size_splits_vector.at(i);
90 }
91 }
92
93 TF_LITE_ENSURE(context, axis_value >= 0);
94 TF_LITE_ENSURE(context, axis_value < NumDimensions(input));
95 const int input_size = SizeOfDimension(input, axis_value);
96
97 if (minus_one_index != -1) {
98 if (size_splits_sum > input_size) {
99 context->ReportError(
100 context,
101 "The sum of size_splits must be less than the dimension of value.");
102 } else {
103 size_splits_vector[minus_one_index] = input_size - size_splits_sum;
104 }
105 } else if (size_splits_sum != input_size) {
106 context->ReportError(
107 context,
108 "The size_splits must sum to the dimension of value along axis.");
109 }
110
111 for (int i = 0; i < NumOutputs(node); ++i) {
112 TfLiteIntArray* output_dims = TfLiteIntArrayCopy(input->dims);
113 output_dims->data[axis_value] = size_splits_vector.at(i);
114 TfLiteTensor* output = GetOutput(context, node, i);
115 TF_LITE_ENSURE_STATUS(context->ResizeTensor(context, output, output_dims));

Callers 2

PrepareFunction · 0.70
EvalFunction · 0.70

Calls 9

NumDimensionsFunction · 0.85
SizeOfDimensionFunction · 0.85
TfLiteIntArrayCopyFunction · 0.85
GetOutputFunction · 0.85
ResizeTensorMethod · 0.80
NumOutputsFunction · 0.70
ReportErrorMethod · 0.45
sizeMethod · 0.45
atMethod · 0.45

Tested by

no test coverage detected