97 bool training)
override {
98 int rows = inputs.rows();
99 int cols = inputs.cols();
100 int numCoord = rows * cols;
101 mask = Eigen::MatrixXd::Constant(rows, cols, 1);
104 std::mt19937 gen(seed);
105 const int num_zeros =
static_cast<int>(numCoord * (1.0 - rate));
107 std::vector<std::tuple<int, int>> randCoordinates;
109 randCoordinates.reserve(num_zeros);
111 if (!coordinates.size() || coordinates.size() != (numCoord)) {
113 coordinates.reserve(numCoord);
115 for (
int i = 0; i < rows; i++) {
116 for (
int j = 0; j < cols; j++) {
117 coordinates.emplace_back(std::make_tuple(i, j));
123 std::sample(coordinates.begin(), coordinates.end(),
124 std::back_inserter(randCoordinates), num_zeros, gen);
126 for (std::tuple<int, int>& coord : randCoordinates) {
127 mask(std::get<0>(coord), std::get<1>(coord)) = 0;
130 Eigen::MatrixXd dO = (inputs.array() * mask.array()) * scaleRate;
133 if (training) outputs = dO;