22template <
typename AReal>
29template <
typename AReal>
32 for (
size_t i = 0; i < (size_t)
output.GetNrows(); i++) {
33 for (
size_t j = 0;
j < (size_t)
output.GetNcols();
j++) {
39template <
typename AReal>
47 for (
size_t i = 0; i < (size_t)df.GetNrows(); i++) {
48 for (
size_t j = 0;
j < (size_t)df.GetNcols();
j++) {
65 for (
size_t j = 0;
j < (size_t)df.GetNcols();
j++) {
67 for (
size_t i = 0; i < (size_t)df.GetNrows(); i++) {
75template <
typename AReal>
78 for (
size_t i = 0; i < (size_t)A.GetNrows(); i++) {
79 for (
size_t j = 0;
j < (size_t)A.GetNcols();
j++) {
80 A(i,
j) += beta * B(i,
j);
85template <
typename AReal>
91template <
typename AReal>
94 for (
size_t i = 0; i < A.size(); ++i) {
95 ScaleAdd(A[i], B[i], beta);
99template <
typename AReal>
102 for (
size_t i = 0; i < A.size(); ++i) {
108template <
typename AReal>
124 for (
int m = 0;
m < B.GetNrows();
m++) {
143template <
typename AReal>
145 size_t filterHeight,
size_t filterWidth,
size_t numFilters)
147 size_t jump = filterHeight * filterWidth;
150 for (
size_t i = 0; i <
jump; i++) {
151 A(
j, k *
jump + i) = B(k, ((
j + 1) *
jump - 1) - i);
158template <
typename AReal>
161 for (
size_t i = 0; i < (size_t)
output.GetNrows(); i++) {
162 for (
size_t j = 0;
j < (size_t)
output.GetNcols();
j++) {
168#ifdef HAVE_CNN_REFERENCE
170template <
typename AReal>
177 size_t inputHeight,
size_t inputWidth,
size_t depth,
size_t height,
187 for (
size_t i = 0; i < batchSize; i++) {
188 for (
size_t j = 0;
j < (size_t)
m;
j++) {
189 for (
size_t k = 0; k < (size_t)
n; k++) {
208template <
typename AReal>
212 size_t inputHeight,
size_t inputWidth,
size_t depth,
214 size_t filterHeight,
size_t filterWidth)
235 for (
size_t i = 0; i < batchSize; i++) {
247template <
typename AReal>
251 size_t batchSize,
size_t inputHeight,
size_t inputWidth,
253 size_t filterHeight,
size_t filterWidth,
size_t nLocalViews)
262 for (
size_t i = 0; i < batchSize; i++) {
273 for (
size_t j = 0;
j <
depth;
j++) {
291 for (
size_t l = 0;
l < filterHeight * filterWidth;
l++) {
316template <
typename AReal>
320 for (
size_t i = 0; i <
depth; i++) {
323 for (
size_t k = 0; k < batchSize; k++) {
333template <
typename AReal>
347 for (
int m = 0;
m < C.GetNrows();
m++) {
348 AReal value = -std::numeric_limits<AReal>::max();
366template <
typename AReal>
370 size_t ,
size_t ,
size_t ,
371 size_t ,
size_t ,
size_t ,
376 for (
size_t j = 0;
j <
depth;
j++) {
392template <
typename AReal>
395 auto nColsA = A.GetNcols();
396 auto nColsB = B.GetNcols();
398 for (
Int_t i = 0; i < A.GetNrows(); i++) {
399 for (
Int_t j = 0;
j < A.GetNcols();
j++) {
407template <
typename AReal>
411 for (
size_t i = 0; i < (size_t)
size; i++) {
412 for (
size_t j = 0;
j < (size_t)
nRows;
j++) {
413 for (
size_t k = 0; k < (size_t)
nCols; k++) {
414 A(i,
j *
nCols + k) = B[i](
j, k);
421template <
typename AReal>
425 for (
size_t i = 0; i < (size_t)
size; i++) {
426 for (
size_t j = 0;
j < (size_t)
nRows;
j++) {
427 for (
size_t k = 0; k < (size_t)
nCols; k++) {
428 A[i](
j, k) = B(i,
j *
nCols + k);
435template <
typename AReal>
440 auto T = out[0].GetNrows();
441 auto D = out[0].GetNcols();
442 if ((T != (
Int_t)in.size()) || (
Int_t(B) != in[0].GetNrows()) || (D != in[0].GetNcols())) {
443 std::cout <<
"Incompatible Dimensions\n"
444 << in.size() <<
"x" << in[0].GetNrows() <<
"x" << in[0].GetNcols() <<
" --> " << B <<
"x" << T <<
"x"
448 for (
size_t i = 0; i < B; ++i) {
450 for (
Int_t k = 0; k < D; ++k) {
451 out[i](
j, k) = in[
j](i, k);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
static void MultiplyTranspose(TMatrixT< Scalar_t > &output, const TMatrixT< Scalar_t > &input, const TMatrixT< Scalar_t > &weights)
Matrix-multiply input with the transpose of weights and write the results into output.
static void Flatten(TMatrixT< AReal > &A, const std::vector< TMatrixT< AReal > > &B, size_t size, size_t nRows, size_t nCols)
Flattens the tensor B, such that each matrix, is stretched in one row, resulting with a matrix A.
static void MaxPoolLayerBackward(TMatrixT< AReal > &activationGradientsBackward, const TMatrixT< AReal > &activationGradients, const TMatrixT< AReal > &indexMatrix, size_t imgHeight, size_t imgWidth, size_t fltHeight, size_t fltWidth, size_t strideRows, size_t strideCol, size_t nLocalViews)
Perform the complete backward propagation step in a Max Pooling Layer.
static void AddRowWise(TMatrixT< Scalar_t > &output, const TMatrixT< Scalar_t > &biases)
Add the vectors biases row-wise to the matrix output.
static void Downsample(TMatrixT< AReal > &A, TMatrixT< AReal > &B, const TMatrixT< AReal > &C, size_t imgHeight, size_t imgWidth, size_t fltHeight, size_t fltWidth, size_t strideRows, size_t strideCols)
Downsample the matrix C to the matrix A, using max operation, such that the winning indices are store...
static void Backward(TMatrixT< Scalar_t > &activationGradientsBackward, TMatrixT< Scalar_t > &weightGradients, TMatrixT< Scalar_t > &biasGradients, TMatrixT< Scalar_t > &df, const TMatrixT< Scalar_t > &activationGradients, const TMatrixT< Scalar_t > &weights, const TMatrixT< Scalar_t > &activationBackward)
Perform the complete backward propagation step.
static void RotateWeights(TMatrixT< AReal > &A, const TMatrixT< AReal > &B, size_t filterDepth, size_t filterHeight, size_t filterWidth, size_t numFilters)
Rotates the matrix B, which is representing a weights, and stores them in the matrix A.
static void Rearrange(std::vector< TMatrixT< AReal > > &out, const std::vector< TMatrixT< AReal > > &in)
Rearrage data according to time fill B x T x D out with T x B x D matrix in.
static void Deflatten(std::vector< TMatrixT< AReal > > &A, const TMatrixT< Scalar_t > &B, size_t index, size_t nRows, size_t nCols)
Transforms each row of B to a matrix and stores it in the tensor B.
static void Im2col(TMatrixT< AReal > &A, const TMatrixT< AReal > &B, size_t imgHeight, size_t imgWidth, size_t fltHeight, size_t fltWidth, size_t strideRows, size_t strideCols, size_t zeroPaddingHeight, size_t zeroPaddingWidth)
Transform the matrix B in local view format, suitable for convolution, and store it in matrix A.
static void ScaleAdd(TMatrixT< Scalar_t > &A, const TMatrixT< Scalar_t > &B, Scalar_t beta=1.0)
Adds a the elements in matrix B scaled by c to the elements in the matrix A.
static void ConvLayerBackward(std::vector< TMatrixT< AReal > > &, TMatrixT< AReal > &, TMatrixT< AReal > &, std::vector< TMatrixT< AReal > > &, const std::vector< TMatrixT< AReal > > &, const TMatrixT< AReal > &, const std::vector< TMatrixT< AReal > > &, size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t)
Perform the complete backward propagation step in a Convolutional Layer.
static void AddConvBiases(TMatrixT< AReal > &output, const TMatrixT< AReal > &biases)
Add the biases in the Convolutional Layer.
static void Copy(TMatrixT< Scalar_t > &A, const TMatrixT< Scalar_t > &B)
static void Reshape(TMatrixT< AReal > &A, const TMatrixT< AReal > &B)
Transform the matrix B to a matrix with different dimensions A.
__global__ void RotateWeights(AFloat *A, const AFloat *B, int filterDepth, int filterHeight, int filterWidth, int numFilters)
void Im2col(const T *data_im, const int channels, const int height, const int width, const int kernel_h, const int kernel_w, const int pad_h, const int pad_w, const int stride_h, const int stride_w, const int dilation_h, const int dilation_w, T *data_col)
im2col : efficient function to re-arrange input data of convolution to a matrix that can be used by B...
create variable transformations
static uint64_t sum(uint64_t i)