23 template<
typename AFloat>
 
   24 void TCpu<AFloat>::DropoutForward(TCpuTensor<AFloat> & A, 
 
   27                                   AFloat dropoutProbability)
 
   29    AFloat *data = A.GetData();
 
   31    TRandom & dlRand = TCpu<AFloat>::GetRandomGenerator();
 
   32    size_t seed = dlRand.Integer(4294967295);   
 
   34    size_t nElements =  A.GetSize();
 
   35    const size_t nSteps = TCpuMatrix<AFloat>::GetNWorkItems(nElements);
 
   39    auto f = [&data, dropoutProbability, &nSteps, &nElements, &seed](UInt_t workerID)
 
   41       TRandom rand(seed+workerID);
 
   42       size_t iMax = std::min(workerID+nSteps,nElements); 
 
   43       for (
size_t i = workerID; i < iMax; ++i) { 
 
   44          AFloat r = rand.Uniform();
 
   45          data[i] = (r > dropoutProbability) ? 0.0 : data[i] / dropoutProbability;
 
   51    TCpuMatrix<AFloat>::GetThreadExecutor().Foreach(f, ROOT::TSeqI(0,nElements,nSteps));
 
   53    for (
size_t i = 0;  i < nElements; i+=nSteps)
 
   60 template<
typename AFloat>
 
   61 void TCpu<AFloat>::Dropout(TCpuMatrix<AFloat> &A,
 
   62                            AFloat dropoutProbability)
 
   64    AFloat *data = A.GetRawDataPointer();
 
   66    auto f = [&data, dropoutProbability](UInt_t workerID)
 
   68       TRandom rand(time(
nullptr) + workerID);
 
   69       AFloat r = rand.Uniform();
 
   70       data[workerID] = (r > dropoutProbability) ? 0.0 : data[workerID] / dropoutProbability;
 
   74    A.GetThreadExecutor().Map(f, ROOT::TSeqI(A.GetNoElements()));