summaryrefslogtreecommitdiff
path: root/runtimes/neurun/src/kernel/cpu/FullyConnectedLayer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtimes/neurun/src/kernel/cpu/FullyConnectedLayer.cc')
-rw-r--r--runtimes/neurun/src/kernel/cpu/FullyConnectedLayer.cc114
1 files changed, 0 insertions, 114 deletions
diff --git a/runtimes/neurun/src/kernel/cpu/FullyConnectedLayer.cc b/runtimes/neurun/src/kernel/cpu/FullyConnectedLayer.cc
deleted file mode 100644
index abe82db5e..000000000
--- a/runtimes/neurun/src/kernel/cpu/FullyConnectedLayer.cc
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.
- */
-
-#include "FullyConnectedLayer.h"
-
-#include "tensorflow/contrib/lite/kernels/internal/optimized/optimized_ops.h"
-#include "tensorflow/contrib/lite/kernels/internal/reference/reference_ops.h"
-#include "kernel/cpu/OperationUtils.h"
-
-#include <mutex>
-
-namespace neurun
-{
-namespace kernel
-{
-namespace cpu
-{
-
-FullyConnectedLayer::FullyConnectedLayer()
- : _inputData(nullptr), _weightsData(nullptr), _biasData(nullptr), _outputData(nullptr),
- _inputShape(), _weightsShape(), _biasShape(), _outputShape(),
- _activation(ANEURALNETWORKS_FUSED_NONE), _inputType(OperandType::SCALAR_FLOAT32)
-{
- // DO NOTHING
-}
-
-// executionMutex is used to protect concurrent access of non-threadsafe resources
-// like gemmlowp::GemmContext.
-// std::mutex is safe for pthreads on Android.
-static std::mutex executionMutex;
-bool FullyConnectedLayer::fullyConnectedFloat32()
-{
- int total_input_size = 1;
- for (int i = 0; i < _inputShape.dimensions.size(); i++)
- {
- total_input_size *= _inputShape.dimensions[i];
- }
-
- int input_size = _weightsShape.dimensions[1];
- const int batch_size = total_input_size / input_size;
- const int num_units = _weightsShape.dimensions[0];
-
- TfLiteFusedActivation act = convertFusedActivation(_activation);
-
- ::tflite::tensor_utils::VectorBatchVectorAssign(reinterpret_cast<const float *>(_biasData),
- num_units, batch_size,
- reinterpret_cast<float *>(_outputData));
-
- // Compute output += weight * input
- ::tflite::tensor_utils::MatrixBatchVectorMultiplyAccumulate(
- reinterpret_cast<const float *>(_weightsData), num_units, input_size,
- reinterpret_cast<const float *>(_inputData), batch_size,
- reinterpret_cast<float *>(_outputData), /*result_stride=*/1);
-
- // Apply activation function
- ::tflite::tensor_utils::ApplyActivationToVector(reinterpret_cast<float *>(_outputData),
- batch_size * num_units, act,
- reinterpret_cast<float *>(_outputData));
-
- return true;
-}
-
-bool FullyConnectedLayer::fullyConnectedQuant8()
-{
- throw std::runtime_error{"FullyConnectedLayer : Not tested for TENSOR_QUANT8_ASYMM"};
-}
-
-void FullyConnectedLayer::configure(uint8_t *inputData, const Shape inputShape,
- uint8_t *weightsData, const Shape weightsShape,
- uint8_t *biasData, const Shape biasShape, FuseCode activation,
- uint8_t *outputData, const Shape outputShape)
-{
- _inputData = inputData;
- _inputShape = inputShape;
- _inputType = inputShape.type;
- _weightsData = weightsData;
- _weightsShape = weightsShape;
- _biasData = biasData;
- _biasShape = biasShape;
- _activation = activation;
- _outputData = outputData;
- _outputShape = outputShape;
-}
-
-void FullyConnectedLayer::run()
-{
- if (_inputType == OperandType::TENSOR_FLOAT32)
- {
- fullyConnectedFloat32();
- }
- else if (_inputType == OperandType::TENSOR_QUANT8_ASYMM)
- {
- throw std::runtime_error{"FullyConnectedLayer : Not tested for TENSOR_QUANT8_ASYMM"};
- // fullyConnectedQuant8();
- }
-}
-
-} // namespace cpu
-} // namespace kernel
-} // namespace neurun