29 #include <type_traits>
32 #include "tiny_dnn/config.h"
43 std::mt19937& operator()() {
47 void set_seed(
unsigned int seed) {
57 template<
typename T>
inline
58 typename std::enable_if<std::is_integral<T>::value, T>::type
59 uniform_rand(T min, T max) {
60 std::uniform_int_distribution<T> dst(min, max);
61 return dst(random_generator::get_instance()());
64 template<
typename T>
inline
65 typename std::enable_if<std::is_floating_point<T>::value, T>::type
66 uniform_rand(T min, T max) {
67 std::uniform_real_distribution<T> dst(min, max);
68 return dst(random_generator::get_instance()());
71 template<
typename T>
inline
72 typename std::enable_if<std::is_floating_point<T>::value, T>::type
73 gaussian_rand(T mean, T sigma) {
74 std::normal_distribution<T> dst(mean, sigma);
75 return dst(random_generator::get_instance()());
78 inline void set_random_seed(
unsigned int seed) {
79 random_generator::get_instance().set_seed(seed);
82 template<
typename Container>
83 inline int uniform_idx(
const Container& t) {
84 return uniform_rand(0,
int(t.size() - 1));
87 inline bool bernoulli(float_t p) {
88 return uniform_rand(float_t(0), float_t(1)) <= p;
91 template<
typename Iter>
92 void uniform_rand(Iter begin, Iter end, float_t min, float_t max) {
93 for (Iter it = begin; it != end; ++it)
94 *it = uniform_rand(min, max);
97 template<
typename Iter>
98 void gaussian_rand(Iter begin, Iter end, float_t mean, float_t sigma) {
99 for (Iter it = begin; it != end; ++it)
100 *it = gaussian_rand(mean, sigma);