blob: 270676a6b54f76e18c44c7f4e9c85f6d5c0736f9 [file] [log] [blame]
Anthony Barbier2a07e182017-08-04 18:20:27 +01001/*
2 * Copyright (c) 2017 ARM Limited.
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#ifndef __ARM_COMPUTE_GRAPH_FULLY_CONNECTED_LAYER_H__
25#define __ARM_COMPUTE_GRAPH_FULLY_CONNECTED_LAYER_H__
26
Georgios Pinitasff421f22017-10-04 16:53:58 +010027#include "arm_compute/graph/GraphContext.h"
Anthony Barbier2a07e182017-08-04 18:20:27 +010028#include "arm_compute/graph/INode.h"
Georgios Pinitase2c82fe2017-10-02 18:51:47 +010029#include "arm_compute/graph/ITensorObject.h"
Anthony Barbier2a07e182017-08-04 18:20:27 +010030#include "arm_compute/graph/Tensor.h"
31#include "arm_compute/graph/Types.h"
32
33namespace arm_compute
34{
35namespace graph
36{
37/** Fully connected layer node */
Georgios Pinitasff421f22017-10-04 16:53:58 +010038class FullyConnectedLayer final : public INode
Anthony Barbier2a07e182017-08-04 18:20:27 +010039{
40public:
41 /** Default constructor
42 *
43 * @param[in] num_neurons Number of neurons
44 * @param[in] weights Weights of the fully connected layer
45 * @param[in] biases Biases of the fully connected layer
46 */
47 template <typename AccessorTypeWeights, typename AccessorTypeBiases>
48 FullyConnectedLayer(unsigned int num_neurons, AccessorTypeWeights &&weights, AccessorTypeBiases &&biases)
49 : _num_neurons(num_neurons), _weights(std::move(weights)), _biases(std::move(biases))
50 {
51 }
52
53 // Inherited methods overriden:
Georgios Pinitase2c82fe2017-10-02 18:51:47 +010054 std::unique_ptr<arm_compute::IFunction> instantiate_node(GraphContext &ctx, ITensorObject *input, ITensorObject *output) override;
Anthony Barbier2a07e182017-08-04 18:20:27 +010055
56 // Inherited methods overriden:
57private:
58 unsigned int _num_neurons; /**< Number of neurons */
59 Tensor _weights; /**< Weights tensor */
60 Tensor _biases; /**< Biases tensor */
61};
62} // namespace graph
63} // namespace arm_compute
64#endif /* __ARM_COMPUTE_GRAPH_FULLY_CONNECTED_LAYER_H__ */