OpenNN
Open-source neural networks library
Loading...
Searching...
No Matches
math_utilities.h
Go to the documentation of this file.
1// OpenNN: Open Neural Networks Library
2// www.opennn.net
3//
4// M A T H U T I L I T I E S H E A D E R
5//
6// Artificial Intelligence Techniques SL
7// artelnics@artelnics.com
8
9#pragma once
10
11#include "pch.h"
12#include "tensor_utilities.h"
13#include "enum_map.h"
14#include "operators.h"
15
16namespace opennn
17{
19void pad(const TensorView& input, TensorView& output);
20
26void bound(const TensorView& input, const TensorView& lower_bounds, const TensorView& upper_bounds, TensorView& output);
28void bound_cpu(const TensorView& input, const TensorView& lower_bounds, const TensorView& upper_bounds, TensorView& output);
29#ifdef OPENNN_HAS_CUDA
31void bound_gpu(const TensorView& input, const TensorView& lower_bounds, const TensorView& upper_bounds, TensorView& output);
32#endif
33
44void scale(const TensorView& input,
45 const TensorView& minimums, const TensorView& maximums,
46 const TensorView& means, const TensorView& standard_deviations,
47 const TensorView& scalers,
48 float min_range, float max_range,
49 TensorView& output);
51void scale_cpu(const TensorView& input,
52 const TensorView& minimums, const TensorView& maximums,
53 const TensorView& means, const TensorView& standard_deviations,
54 const TensorView& scalers,
55 float min_range, float max_range,
56 TensorView& output);
57#ifdef OPENNN_HAS_CUDA
59void scale_gpu(const TensorView& input,
60 const TensorView& minimums, const TensorView& maximums,
61 const TensorView& means, const TensorView& standard_deviations,
62 const TensorView& scalers,
63 float min_range, float max_range,
64 TensorView& output);
65#endif
66
68void unscale(const TensorView& input,
69 const TensorView& minimums, const TensorView& maximums,
70 const TensorView& means, const TensorView& standard_deviations,
71 const TensorView& scalers,
72 float min_range, float max_range,
73 TensorView& output);
75void unscale_cpu(const TensorView& input,
76 const TensorView& minimums, const TensorView& maximums,
77 const TensorView& means, const TensorView& standard_deviations,
78 const TensorView& scalers,
79 float min_range, float max_range,
80 TensorView& output);
81#ifdef OPENNN_HAS_CUDA
83void unscale_gpu(const TensorView& input,
84 const TensorView& minimums, const TensorView& maximums,
85 const TensorView& means, const TensorView& standard_deviations,
86 const TensorView& scalers,
87 float min_range, float max_range,
88 TensorView& output);
89#endif
90
92void copy(const TensorView& source, TensorView& destination);
94void copy_cpu(const TensorView& source, TensorView& destination);
95#ifdef OPENNN_HAS_CUDA
97void copy_gpu(const TensorView& source, TensorView& destination);
98#endif
99
101void add(const TensorView& input_1, const TensorView& input_2, TensorView& output);
103void add_cpu(const TensorView& input_1, const TensorView& input_2, TensorView& output);
104#ifdef OPENNN_HAS_CUDA
106void add_gpu(const TensorView& input_1, const TensorView& input_2, TensorView& output);
107#endif
108
117void multiply(const TensorView& input_a, bool transpose_a, const TensorView& input_b, bool transpose_b, TensorView& output, float alpha = 1.0f, float beta = 0.0f);
119void multiply_cpu(const TensorView& input_a, bool transpose_a, const TensorView& input_b, bool transpose_b, TensorView& output, float alpha = 1.0f, float beta = 0.0f);
120#ifdef OPENNN_HAS_CUDA
122void multiply_gpu(const TensorView& input_a, bool transpose_a, const TensorView& input_b, bool transpose_b, TensorView& output, float alpha = 1.0f, float beta = 0.0f);
123#endif
124
126void softmax(TensorView& output);
129#ifdef OPENNN_HAS_CUDA
131void softmax_gpu(TensorView& output);
132#endif
138void max_pooling_3d_forward(const TensorView& input, TensorView& output, TensorView& maximal_indices, bool is_training);
140void max_pooling_3d_forward_cpu(const TensorView& input, TensorView& output, TensorView& maximal_indices, bool is_training);
141#ifdef OPENNN_HAS_CUDA
143void max_pooling_3d_forward_gpu(const TensorView& input, TensorView& output, TensorView& maximal_indices, bool is_training);
144#endif
145
150#ifdef OPENNN_HAS_CUDA
152void average_pooling_3d_forward_gpu(const TensorView& input, TensorView& output);
153#endif
154
156void max_pooling_3d_backward(const TensorView& maximal_indices, const TensorView& output_delta, TensorView& input_delta);
158void max_pooling_3d_backward_cpu(const TensorView& maximal_indices, const TensorView& output_delta, TensorView& input_delta);
159#ifdef OPENNN_HAS_CUDA
161void max_pooling_3d_backward_gpu(const TensorView& maximal_indices, const TensorView& output_delta, TensorView& input_delta);
162#endif
163
165void average_pooling_3d_backward(const TensorView& input, const TensorView& output_delta, TensorView& input_delta);
167void average_pooling_3d_backward_cpu(const TensorView& input, const TensorView& output_delta, TensorView& input_delta);
168#ifdef OPENNN_HAS_CUDA
170void average_pooling_3d_backward_gpu(const TensorView& input, const TensorView& output_delta, TensorView& input_delta);
171#endif
173void split_heads(const TensorView& source, TensorView& destination);
175void split_heads_cpu(const TensorView& source, TensorView& destination);
176#ifdef OPENNN_HAS_CUDA
178void split_heads_gpu(const TensorView& source, TensorView& destination);
179#endif
180
182void merge_heads(const TensorView& source, TensorView& destination);
184void merge_heads_cpu(const TensorView& source, TensorView& destination);
185#ifdef OPENNN_HAS_CUDA
187void merge_heads_gpu(const TensorView& source, TensorView& destination);
188#endif
189
190}
191
192// OpenNN: Open Neural Networks Library.
193// Copyright(C) 2005-2026 Artificial Intelligence Techniques, SL.
194// Licensed under the GNU Lesser General Public License v2.1 or later.
Definition adaptive_moment_estimation.h:14
void copy(const TensorView &source, TensorView &destination)
Copies the contents of source into destination, dispatching to CPU or GPU as needed.
void unscale(const TensorView &input, const TensorView &minimums, const TensorView &maximums, const TensorView &means, const TensorView &standard_deviations, const TensorView &scalers, float min_range, float max_range, TensorView &output)
Inverse of scale(); reconstructs original values from a previously scaled tensor.
void softmax(TensorView &output)
Applies softmax in place along the trailing dimension of output.
void copy_cpu(const TensorView &source, TensorView &destination)
CPU implementation of copy().
void multiply_cpu(const TensorView &input_a, bool transpose_a, const TensorView &input_b, bool transpose_b, TensorView &output, float alpha=1.0f, float beta=0.0f)
CPU implementation of multiply().
void bound(const TensorView &input, const TensorView &lower_bounds, const TensorView &upper_bounds, TensorView &output)
Clamps each element of input to the [lower_bounds, upper_bounds] range.
void bound_cpu(const TensorView &input, const TensorView &lower_bounds, const TensorView &upper_bounds, TensorView &output)
CPU implementation of bound().
void unscale_cpu(const TensorView &input, const TensorView &minimums, const TensorView &maximums, const TensorView &means, const TensorView &standard_deviations, const TensorView &scalers, float min_range, float max_range, TensorView &output)
CPU implementation of unscale().
void max_pooling_3d_backward_cpu(const TensorView &maximal_indices, const TensorView &output_delta, TensorView &input_delta)
CPU implementation of max_pooling_3d_backward().
void pad(const TensorView &input, TensorView &output)
Pads the input tensor and writes the result into output.
VectorI maximal_indices(const VectorR &, Index)
Indices of the n largest elements of a vector.
void max_pooling_3d_backward(const TensorView &maximal_indices, const TensorView &output_delta, TensorView &input_delta)
Backward pass for 3D max pooling; routes gradients to argmax positions.
void merge_heads(const TensorView &source, TensorView &destination)
Inverse of split_heads(); merges per-head tensors back into a single representation.
void merge_heads_cpu(const TensorView &source, TensorView &destination)
CPU implementation of merge_heads().
void average_pooling_3d_forward_cpu(const TensorView &input, TensorView &output)
CPU implementation of average_pooling_3d_forward().
void average_pooling_3d_backward_cpu(const TensorView &input, const TensorView &output_delta, TensorView &input_delta)
CPU implementation of average_pooling_3d_backward().
void average_pooling_3d_forward(const TensorView &input, TensorView &output)
Forward pass of 3D average pooling.
void add(const TensorView &input_1, const TensorView &input_2, TensorView &output)
Element-wise addition: output = input_1 + input_2.
void multiply(const TensorView &input_a, bool transpose_a, const TensorView &input_b, bool transpose_b, TensorView &output, float alpha=1.0f, float beta=0.0f)
General matrix multiply: output = alpha * op(input_a) * op(input_b) + beta * output.
void max_pooling_3d_forward(const TensorView &input, TensorView &output, TensorView &maximal_indices, bool is_training)
Forward pass of 3D max pooling; records argmax positions when training.
void scale_cpu(const TensorView &input, const TensorView &minimums, const TensorView &maximums, const TensorView &means, const TensorView &standard_deviations, const TensorView &scalers, float min_range, float max_range, TensorView &output)
CPU implementation of scale().
void split_heads(const TensorView &source, TensorView &destination)
Reshapes a multi-head attention tensor by splitting the last axis into heads.
void split_heads_cpu(const TensorView &source, TensorView &destination)
CPU implementation of split_heads().
void softmax_cpu(TensorView &output)
CPU implementation of softmax().
void scale(const TensorView &input, const TensorView &minimums, const TensorView &maximums, const TensorView &means, const TensorView &standard_deviations, const TensorView &scalers, float min_range, float max_range, TensorView &output)
Applies per-feature scaling (mean/std, min/max, or other scalers) to a tensor.
void max_pooling_3d_forward_cpu(const TensorView &input, TensorView &output, TensorView &maximal_indices, bool is_training)
CPU implementation of max_pooling_3d_forward().
void average_pooling_3d_backward(const TensorView &input, const TensorView &output_delta, TensorView &input_delta)
Backward pass for 3D average pooling.
void add_cpu(const TensorView &input_1, const TensorView &input_2, TensorView &output)
CPU implementation of add().
Non-owning view over a tensor: pointer, shape, and data type with rich reshape helpers.
Definition tensor_utilities.h:293