23template<
typename AFloat>
27 AFloat dropoutProbability)
29 AFloat *data = A.GetData();
32 size_t seed = dlRand.
Integer(4294967295);
34 size_t nElements = A.GetSize();
39 auto f = [&data, dropoutProbability, &nSteps, &nElements, &seed](
UInt_t 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;
53 for (
size_t i = 0; i < nElements; i+=nSteps)
60template<
typename AFloat>
61void 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()));
A pseudo container class which is a generator of indices.
static size_t GetNWorkItems(size_t nelements)
static Executor & GetThreadExecutor()
static TRandom & GetRandomGenerator()
static void DropoutForward(Tensor_t &A, TDescriptors *descriptors, TWorkspace *workspace, Scalar_t p)
Apply dropout with activation probability p to the given tensor A and scale the result by reciprocal ...
void Foreach(Function func, unsigned int nTimes, unsigned nChunks=0)
wrap TExecutor::Foreach
This is the base class for the ROOT Random number generators.
virtual UInt_t Integer(UInt_t imax)
Returns a random integer uniformly distributed on the interval [ 0, imax-1 ].
create variable transformations