笔者感觉numpy、tensorflow中的随机函数有些杂,用的时候总是不知道用哪一个,所以在本篇博客中对其进行一个简单的总结。
numpy的随机函数
我们可以利用numpy随机(random)模块生成我们想要的随机序列或进行一系列随机操作。常用api如下:
- np.random.randint(a, b)
该函数用于生成一个指定范围 [a,b] 的整数。 - np.random.randn(d0,d1,d2……dn)
当函数括号内没有参数时,则返回一个浮点数;当函数括号内有一个参数时,则返回秩为1的数组,不能表示向量和矩阵;当函数括号内有两个及以上参数时,则返回对应维度的数组,能表示向量或矩阵; np.random.standard_normal()函数与np.random.randn()类似,但是np.random.standard_normal()的输入参数为元组(tuple).np.random.randn()的输入通常为整数,但是如果为浮点数,则会自动直接截断转换为整数。 - np.random.rand()
使用方法与np.random.randn()函数相同。通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。 应用:在深度学习的Dropout正则化方法中,可以用于生成dropout随机向量(dl),例如(keep_prob表示保留神经元的比例):dl = np.random.rand(al.shape[0],al.shape[1]) < keep_prob - np.random.randrange()
random.randrange的函数原型为:random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。 - np.random.choice()
random.choice从序列中获取n个随机元素。其函数原型为:random.choice(sequence, n)。 - np.random.random()
random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0。 - np.random.uniform()
random.uniform的函数原型为:random.uniform(a, b, size),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。 - np.random.normal(loc=0.0, scale=1.0, size=None)
loc:float,此概率分布的均值(对应着整个分布的中心centre)。scale:float,此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)。size:int or tuple of ints,输出的shape,默认为None,只输出一个值。 - np.random.shuffel()
random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱。
tensorflow的随机函数
tensorflow内置了许多进行随机操作的api。
- tf.truncated_normal(shape=[3, 4], dtype=tf.float32, stddev=0.1, mean=0.)
这个函数产生正太分布,均值和标准差自己设定。这是一个截断的产生正太分布的函数,就是说产生正太分布的值如果与均值的差值大于两倍的标准差,那就重新生成。和一般的正太分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。 - tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
从正态分布中输出随机值。 - tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)
返回值的范围默认是0到1的左闭右开区间,即[0,1)。minval为指定最小边界,默认为1。maxval为指定的最大边界,如果是数据浮点型则默认为1,如果数据为整形则必须指定。 - tf.random_shuffle(value)
沿着要被洗牌的张量的第一个维度,随机打乱。 - tf.random.normal([3, 4], stddev=0.1, dtype=tf.float32, mean=0.3)
与上面的用法相似。