29template <
typename AReal>
37template <
typename AReal>
40 AReal **pointer =
new AReal *[1];
41 *pointer =
new AReal[
size];
46template <
typename AReal>
56template <
typename AReal>
64template <
typename AReal>
79 for (
size_t i = 0; i < batchSize; i++) {
80 size_t sampleIndex = *sampleIterator;
81 for (
size_t j = 0; j <
n; j++) {
82 size_t bufferIndex = j * batchSize + i;
97 for (
size_t i = 0; i < batchSize; i++) {
98 size_t sampleIndex = *sampleIterator;
99 for (
size_t j = 0; j <
n; j++) {
100 size_t bufferIndex = j * batchSize + i;
114 for (
size_t i = 0; i < batchSize; i++) {
115 size_t sampleIndex = *sampleIterator;
129 for (
size_t i = 0; i < batchSize; i++) {
130 size_t sampleIndex = *sampleIterator;
131 for (
size_t j = 0; j <
n; j++) {
132 size_t bufferIndex = j * batchSize + i;
147 for (
size_t i = 0; i < batchSize; i++) {
148 size_t sampleIndex = *sampleIterator;
149 for (
size_t j = 0; j <
n; j++) {
150 size_t bufferIndex = j * batchSize + i;
164 for (
size_t i = 0; i < batchSize; i++) {
165 size_t sampleIndex = *sampleIterator;
177 size_t n =
event->GetNVariables();
178 for (
size_t i = 0; i < batchSize; i++) {
179 size_t sampleIndex = * sampleIterator++;
180 event = std::get<0>(
fData)[sampleIndex];
181 for (
size_t j = 0; j <
n; j++) {
182 size_t bufferIndex = j * batchSize + i;
183 buffer[bufferIndex] =
event->GetValue(j);
194 size_t n = buffer.
GetSize() / batchSize;
198 for (
size_t i = 0; i < batchSize; i++) {
199 size_t sampleIndex = *sampleIterator++;
200 Event *
event = std::get<0>(
fData)[sampleIndex];
201 for (
size_t j = 0; j <
n; j++) {
203 size_t bufferIndex = j * batchSize + i;
205 if (event->GetNTargets() == 0) {
208 buffer[bufferIndex] = (info.
IsSignal(event)) ? 1.0 : 0.0;
211 buffer[bufferIndex] = 0.0;
212 if (j == event->GetClass()) {
213 buffer[bufferIndex] = 1.0;
217 buffer[bufferIndex] =
static_cast<Float_t>(
event->GetTarget(j));
228 for (
size_t i = 0; i < batchSize; i++) {
229 size_t sampleIndex = *sampleIterator++;
230 Event *
event = std::get<0>(
fData)[sampleIndex];
231 buffer[i] =
event->GetWeight();
241 size_t n =
event->GetNVariables();
242 for (
size_t i = 0; i < batchSize; i++) {
243 size_t sampleIndex = * sampleIterator++;
244 event = std::get<0>(
fData)[sampleIndex];
245 for (
size_t j = 0; j <
n; j++) {
246 size_t bufferIndex = j * batchSize + i;
247 buffer[bufferIndex] =
static_cast<Float_t>(
event->GetValue(j));
258 size_t n = buffer.
GetSize() / batchSize;
262 for (
size_t i = 0; i < batchSize; i++) {
263 size_t sampleIndex = *sampleIterator++;
264 Event *
event = std::get<0>(
fData)[sampleIndex];
265 for (
size_t j = 0; j <
n; j++) {
267 size_t bufferIndex = j * batchSize + i;
269 if (event->GetNTargets() == 0) {
272 buffer[bufferIndex] = (info.
IsSignal(event)) ? 1.0 : 0.0;
275 buffer[bufferIndex] = 0.0;
276 if (j == event->GetClass()) {
277 buffer[bufferIndex] = 1.0;
281 buffer[bufferIndex] =
static_cast<Float_t>(
event->GetTarget(j));
292 for (
size_t i = 0; i < batchSize; i++) {
293 size_t sampleIndex = *sampleIterator++;
294 Event *
event = std::get<0>(
fData)[sampleIndex];
295 buffer[i] =
static_cast<Float_t>(
event->GetWeight());
308 size_t sampleIndex = *sampleIterator;
317 size_t sampleIndex = *sampleIterator;
338 size_t sampleIndex = *sampleIterator;
339 for (
size_t j = 0; j <
n; j++) {
355 size_t sampleIndex = *sampleIterator;
368 DeviceBufferTuple DeviceBuffers = CopyTensorBatches();
370 Tensor_t inputTensor( std::get<0>(DeviceBuffers), { fBatchHeight, fBatchWidth, fBatchSize } );
376 Matrix_t outputMatrix(std::get<1>(DeviceBuffers), fBatchSize, fNOutputFeatures);
377 Matrix_t weightMatrix(std::get<2>(DeviceBuffers), fBatchSize, fNOutputFeatures);
393 size_t sampleIndex = *sampleIterator;
396 buffer[bufferIndex] =
inputTensor[0](sampleIndex, j);
402 size_t sampleIndex = *sampleIterator;
406 buffer[bufferIndex] =
inputTensor[sampleIndex](j, k);
423 size_t sampleIndex = *sampleIterator;
424 for (
size_t j = 0; j <
n; j++) {
440 size_t sampleIndex = *sampleIterator;
452 DeviceBufferTuple DeviceBuffers = CopyTensorBatches();
454 Tensor_t inputTensor( std::get<0>(DeviceBuffers), { fBatchHeight, fBatchWidth, fBatchSize } );
461 Matrix_t outputMatrix(std::get<1>(DeviceBuffers), fBatchSize, fNOutputFeatures);
462 Matrix_t weightMatrix(std::get<2>(DeviceBuffers), fBatchSize, fNOutputFeatures);
480 size_t sampleIndex = *sampleIterator;
481 Event *
event = std::get<0>(
fData)[sampleIndex];
484 buffer[bufferIndex] =
event->GetValue(j);
491 size_t sampleIndex = *sampleIterator;
492 Event *
event = std::get<0>(
fData)[sampleIndex];
497 buffer[bufferIndex] =
event->GetValue(j *
fBatchWidth + k);
504 Error(
"TTensorDataLoader",
"Inconsistency between batch depth and batch size");
520 size_t sampleIndex = *sampleIterator++;
521 Event *
event = std::get<0>(
fData)[sampleIndex];
522 for (
size_t j = 0; j <
n; j++) {
526 if (event->GetNTargets() == 0) {
529 buffer[bufferIndex] = (info.
IsSignal(event)) ? 1.0 : 0.0;
532 buffer[bufferIndex] = 0.0;
533 if (j == event->GetClass()) {
534 buffer[bufferIndex] = 1.0;
538 buffer[bufferIndex] =
static_cast<Float_t>(
event->GetTarget(j));
550 size_t sampleIndex = *sampleIterator++;
551 Event *
event = std::get<0>(
fData)[sampleIndex];
552 buffer[i] =
event->GetWeight();
563 DeviceBufferTuple DeviceBuffers = CopyTensorBatches();
566 Tensor_t inputTensor( std::get<0>(DeviceBuffers), { fBatchHeight, fBatchWidth, fBatchSize } );
572 Matrix_t outputMatrix(std::get<1>(DeviceBuffers), fBatchSize, fNOutputFeatures);
573 Matrix_t weightMatrix(std::get<2>(DeviceBuffers), fBatchSize, fNOutputFeatures);
590 size_t sampleIndex = *sampleIterator;
591 Event *
event = std::get<0>(
fData)[sampleIndex];
594 buffer[bufferIndex] =
event->GetValue(j);
601 size_t sampleIndex = *sampleIterator;
602 Event *
event = std::get<0>(
fData)[sampleIndex];
607 buffer[bufferIndex] =
event->GetValue(j *
fBatchWidth + k);
614 Error(
"TTensorDataLoader",
"Inconsistency between batch depth and batch size");
630 size_t sampleIndex = *sampleIterator++;
631 Event *
event = std::get<0>(
fData)[sampleIndex];
632 for (
size_t j = 0; j <
n; j++) {
636 if (event->GetNTargets() == 0) {
639 buffer[bufferIndex] = (info.
IsSignal(event)) ? 1.0 : 0.0;
642 buffer[bufferIndex] = 0.0;
643 if (j == event->GetClass()) {
644 buffer[bufferIndex] = 1.0;
648 buffer[bufferIndex] =
static_cast<Float_t>(
event->GetTarget(j));
660 size_t sampleIndex = *sampleIterator++;
661 Event *
event = std::get<0>(
fData)[sampleIndex];
662 buffer[i] =
event->GetWeight();
673 DeviceBufferTuple DeviceBuffers = CopyTensorBatches();
675 Tensor_t inputTensor( std::get<0>(DeviceBuffers), { fBatchHeight, fBatchWidth, fBatchSize } );
682 Matrix_t outputMatrix(std::get<1>(DeviceBuffers), fBatchSize, fNOutputFeatures);
683 Matrix_t weightMatrix(std::get<2>(DeviceBuffers), fBatchSize, fNOutputFeatures);
692template class TCpuBuffer<Double_t>;
693template class TCpuBuffer<Float_t>;
695template class TTensorDataLoader<TensorInput, TCpu<Float_t>>;
696template class TTensorDataLoader<TMVAInput_t, TCpu<Float_t>>;
697template class TTensorDataLoader<TensorInput, TCpu<Double_t>>;
698template class TTensorDataLoader<TMVAInput_t, TCpu<Double_t>>;
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
double Double_t
Double 8 bytes.
float Float_t
Float 4 bytes (float).
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
TCpuBuffer GetSubBuffer(size_t offset, size_t start) const
Return sub-buffer of size start starting at element offset.
size_t GetSize() const
copy pointer from an external
void CopyTo(TCpuBuffer &) const
Copy data to another buffer.
TCpuBuffer(size_t size)
Construct buffer to hold size numbers of type AFloat.
void CopyFrom(const TCpuBuffer &)
Copy data from another buffer.
std::shared_ptr< AFloat * > fBuffer
struct TMVA::DNN::TCpuBuffer::TDestructor fDestructor
void CopyWeights(TMatrixT< AReal > &matrix, IndexIterator_t begin)
Copy weight matrix into the given host buffer.
void CopyOutput(TMatrixT< AReal > &matrix, IndexIterator_t begin)
Copy output matrix into the given host buffer.
void CopyInput(TMatrixT< AReal > &matrix, IndexIterator_t begin)
Copy input matrix into the given host buffer.
TMatrixT< AReal > outputMatrix
TMatrixT< AReal > inputMatrix
TDataLoader(const AData &data, size_t nSamples, size_t batchSize, size_t nInputFeatures, size_t nOutputFeatures, size_t nthreads=1)
TTensorDataLoader(const AData &data, size_t nSamples, size_t batchDepth, size_t batchHeight, size_t batchWidth, size_t nOutputFeatures, std::vector< size_t > inputShape, size_t nStreams=1)
Constructor.
size_t fBatchHeight
The number od rows in each matrix.
const AData & fData
The data that should be loaded in the batches.
std::vector< TMatrixT< AReal > > inputTensor
The 3D tensor used to keep the input data.
void CopyTensorInput(std::vector< TMatrixT< AReal > > &tensor, IndexIterator_t sampleIterator)
Copy input tensor into the given host buffer.
TMatrixT< AReal > outputMatrix
The matrix used to keep the output.
size_t fBatchDepth
The number of matrices in the tensor.
size_t fBatchWidth
The number of columns in each matrix.
void CopyTensorWeights(TMatrixT< AReal > &matrix, IndexIterator_t sampleIterator)
Copy weight matrix into the given host buffer.
void CopyTensorOutput(TMatrixT< AReal > &matrix, IndexIterator_t sampleIterator)
Copy output matrix into the given host buffer.
Class that contains all the data information.
Bool_t IsSignal(const Event *ev) const
typename std::vector< size_t >::iterator IndexIterator_t
create variable transformations
void operator()(AFloat **pointer)