26#ifndef _H_GRB_ALGORITHMS_SPARSE_NN_SINGLE_INFERENCE 
   27#define _H_GRB_ALGORITHMS_SPARSE_NN_SINGLE_INFERENCE 
   35    namespace algorithms {
 
   49                bool thresholded, 
typename ThresholdType,
 
   50                typename IOType, 
typename WeightType, 
typename BiasType,
 
   51                class ReluMonoid, 
class Ring, 
class MinMonoid
 
   57                const std::vector< BiasType > &biases,
 
   58                const ThresholdType threshold,
 
   60                const ReluMonoid &relu,
 
   66                        std::is_same< IOType, WeightType >::value &&
 
   67                        std::is_same< IOType, BiasType >::value
 
   68                    ), 
"Input containers have different domains even though the no_casting" 
   69                    "descriptor was given" 
   72                const size_t num_layers = layers.size();
 
   77                    if( num_layers == 0 ) {
 
   80                    if( biases.size() != num_layers ) {
 
   89                    for( 
size_t i = 1; i < num_layers; ++i ) {
 
   94                    for( 
size_t i = 0; i < num_layers; ++i ) {
 
  133                ret = ret ? ret : 
grb::vxm( out, in, ( layers[ 0 ] ), ring );
 
  136                ret = ret ? ret : grb::foldl< descriptors::dense >(
 
  137                    out, biases[ 1 ], ring.getAdditiveMonoid()
 
  140                for( 
size_t i = 1; ret == 
SUCCESS && i < num_layers - 1; ++i ) {
 
  142                    ret = ret ? ret : grb::foldl< descriptors::dense >( out, 0, relu );
 
  146                        ret = ret ? ret : grb::foldl< descriptors::dense >( out, threshold, min );
 
  151                        std::swap( out, temp );
 
  157                    ret = ret ? ret : grb::vxm< descriptors::dense >(
 
  158                        out, temp, ( layers[ i ] ), ring
 
  161                    ret = ret ? ret : grb::foldl< descriptors::dense >(
 
  162                        out, biases[ i + 1 ], ring.getAdditiveMonoid()
 
  166                ret = ret ? ret : grb::foldl< descriptors::dense >( out, 0, relu );
 
  170                    ret = ret ? ret : grb::foldl< descriptors::dense >( out, threshold, min );
 
  261            class ReluMonoid = Monoid<
 
  265            class Ring = Semiring<
 
  274            const std::vector< BiasType > &biases,
 
  276            const ReluMonoid &relu = ReluMonoid(),
 
  277            const Ring &ring = Ring()
 
  281                    std::is_same< IOType, WeightType >::value &&
 
  282                    std::is_same< IOType, BiasType >::value
 
  283                ), 
"Input containers have different domains even though the no_casting " 
  284                "descriptor was given" );
 
  287            > dummyTresholdMonoid;
 
  294                relu, dummyTresholdMonoid, ring
 
  387            typename ThresholdType = IOType,
 
  391            class ReluMonoid = 
Monoid<
 
  404            const std::vector< BiasType > &biases,
 
  405            const ThresholdType threshold,
 
  407            const ReluMonoid &relu = ReluMonoid(),
 
  408            const MinMonoid &min = MinMonoid(),
 
  409            const Ring &ring = Ring()
 
  413                    std::is_same< IOType, WeightType >::value &&
 
  414                    std::is_same< IOType, BiasType >::value
 
  415                ), 
"Input containers have different domains even though the no_casting " 
  416                "descriptor was given" );
 
An ALP/GraphBLAS matrix.
Definition: matrix.hpp:71
 
A generalised monoid.
Definition: monoid.hpp:54
 
A generalised semiring.
Definition: semiring.hpp:186
 
A GraphBLAS vector.
Definition: vector.hpp:64
 
Standard identity for the minimum operator.
Definition: identities.hpp:101
 
Standard identity for the maximum operator.
Definition: identities.hpp:124
 
Standard identity for numerical multiplication.
Definition: identities.hpp:79
 
Standard identity for numerical addition.
Definition: identities.hpp:57
 
This operator takes the sum of the two input parameters and writes it to the output variable.
Definition: ops.hpp:177
 
This operator takes the minimum of the two input parameters and writes the result to the output varia...
Definition: ops.hpp:276
 
This operator multiplies the two input parameters and writes the result to the output variable.
Definition: ops.hpp:210
 
This operation is equivalent to grb::operators::min.
Definition: ops.hpp:516
 
The main header to include in order to use the ALP/GraphBLAS API.
 
RC vxm(Vector< IOType, backend, Coords > &u, const Vector< InputType3, backend, Coords > &u_mask, const Vector< InputType1, backend, Coords > &v, const Vector< InputType4, backend, Coords > &v_mask, const Matrix< InputType2, backend, RIT, CIT, NIT > &A, const Semiring &semiring=Semiring(), const Phase &phase=EXECUTE, typename std::enable_if< grb::is_semiring< Semiring >::value &&!grb::is_object< InputType1 >::value &&!grb::is_object< InputType2 >::value &&!grb::is_object< InputType3 >::value &&!grb::is_object< InputType4 >::value &&!grb::is_object< IOType >::value, void >::type *=nullptr)
Left-handed in-place doubly-masked sparse matrix times vector multiplication, .
Definition: blas2.hpp:307
 
RC set(Vector< DataType, backend, Coords > &x, const T val, const Phase &phase=EXECUTE, const typename std::enable_if< !grb::is_object< DataType >::value &&!grb::is_object< T >::value, void >::type *const =nullptr) noexcept
Sets all elements of a vector to the given value.
Definition: io.hpp:857
 
size_t size(const Vector< DataType, backend, Coords > &x) noexcept
Request the size of a given vector.
Definition: io.hpp:235
 
size_t ncols(const Matrix< InputType, backend, RIT, CIT, NIT > &A) noexcept
Requests the column size of a given matrix.
Definition: io.hpp:339
 
size_t capacity(const Vector< InputType, backend, Coords > &x) noexcept
Queries the capacity of the given ALP/GraphBLAS container.
Definition: io.hpp:388
 
size_t nrows(const Matrix< InputType, backend, RIT, CIT, NIT > &A) noexcept
Requests the row size of a given matrix.
Definition: io.hpp:286
 
grb::RC sparse_nn_single_inference(grb::Vector< IOType > &out, const grb::Vector< IOType > &in, const std::vector< grb::Matrix< WeightType > > &layers, const std::vector< BiasType > &biases, const ThresholdType threshold, grb::Vector< IOType > &temp, const ReluMonoid &relu=ReluMonoid(), const MinMonoid &min=MinMonoid(), const Ring &ring=Ring())
Performs an inference step of a single data element through a Sparse Neural Network defined by num_la...
Definition: sparse_nn_single_inference.hpp:400
 
grb::RC sparse_nn_single_inference(grb::Vector< IOType > &out, const grb::Vector< IOType > &in, const std::vector< grb::Matrix< WeightType > > &layers, const std::vector< BiasType > &biases, grb::Vector< IOType > &temp, const ReluMonoid &relu=ReluMonoid(), const Ring &ring=Ring())
Performs an inference step of a single data element through a Sparse Neural Network defined by num_la...
Definition: sparse_nn_single_inference.hpp:270
 
static constexpr Descriptor no_casting
Disallows the standard casting of input parameters to a compatible domain in case they did not match ...
Definition: descriptors.hpp:196
 
static constexpr Descriptor no_operation
Indicates no additional pre- or post-processing on any of the GraphBLAS function arguments.
Definition: descriptors.hpp:63
 
The ALP/GraphBLAS namespace.
Definition: graphblas.hpp:452
 
RC
Return codes of ALP primitives.
Definition: rc.hpp:47
 
@ ILLEGAL
A call to a primitive has determined that one of its arguments was illegal as per the specification o...
Definition: rc.hpp:143
 
@ MISMATCH
One or more of the ALP/GraphBLAS objects passed to the primitive that returned this error have mismat...
Definition: rc.hpp:90
 
@ SUCCESS
Indicates the primitive has executed successfully.
Definition: rc.hpp:54
 
unsigned int Descriptor
Descriptors indicate pre- or post-processing for some or all of the arguments to an ALP/GraphBLAS cal...
Definition: descriptors.hpp:54