TensorFlow的随机张量(Random Tensors)

随机张量(Random Tensors)
TensorFlow有几种操作可以创建具有不同分布的随机张量。随机操作是有状态的, 每次评估时都会创建新的随机值。与变量不同, 随机张量在运行前不再需要显式初始化。
tf.random_normal
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
从正态分布中输出随机值,其中均值为mean,标准差为stddev。参数shape为张量形状,dtype为类型,seed为随机种子,name为名称。
norm = tf.random_normal([2, 3], mean=-1, stddev=4)
sess = tf.Session()
print(sess.run(norm))  #输出 [[-1.927158, 0.56860375,  -1.6347605 ], [-0.45961732, -6.2033143,  -1.4693949 ]]
print(sess.run(norm))  #输出 [[-0.805746, -0.80579025, -8.162067  ], [-3.368027, 4.3944254, -3.5628827 ]],可见2次输出的值是不一样的。
tf.truncated_normal
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None,name=None)
从截断的正态分布中输出随机值,其形状为shape,均值为mean,标准差为stddev。其他参数参考见tf.random_normal。
生成的值遵循具有指定平均值和标准偏差的正态分布,不同之处在于其平均值大于2个标准差的值将被丢弃并重新挑选。

tf.random_uniform
tf.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None,name=None)
从均匀分布中输出随机值。生成的值遵循范围内的均匀分布 [minval, maxval)。下限minval包含在该范围内,而上限maxval是不包含的。
对于浮点类型,默认范围是[0, 1)。对于整型,必须明确指定maxval。在类型是整型情况下,随机整数稍有偏差,除非 maxval - minval刚好是2的幂。对于那些maxval - minval的值明显小于输出范围的( 2**32或者2**64),偏差就会很小 。
参数shape是张量形状,minval是最小值,maxval是最大值,dtype是类型,seed是随机种子,name是名称。
r4 = tf.random_uniform([3], minval=3.0, maxval = 4.0)
print(sess.run(r4))  # r4 = [3.880138,  3.0414245, 3.4914312]
tf.random_shuffle
tf.random_shuffle(value, seed=None, name=None)
将输入的张量value里面的值随机打乱。参数value是输入的张量,seed是随机种子,name是名称。
c = tf.constant([[1, 2], [3, 4], [5, 6]])
shuff = tf.random_shuffle(c)  
print(sess.run(shuff))  #输出[[5, 6], [1 2], [3, 4]]
print(sess.run(shuff))  #输出[[3, 4],  [1, 2], [5 6]]
tf.random_crop
tf.random_crop(value, size, seed=None, name=None)
将张量value随机裁切成size形状大小的张量,其中value的形状大小必须>=size。参数value张量,size为裁切的形状大小,seed是随机种子,name是名称。
c = tf.constant([[1, 2], [3, 4], [5, 6]])
d = tf.random_crop(c,[2,2])
print(sess.run(d))  #输出[[1, 2], [3, 4]]
print(sess.run(d))  #输出[[3, 4], [5, 6]]
tf.multinomial
tf.multinomial(logits, num_samples, seed=None, name=None, output_dtype=None)
从多项分布中绘制样本,返回的样本形状是[batch_size, num_samples],返回样本的值是logits的下标序号。参数logits是具有形状[batch_size, num_classes]的二维张量,num_samples是采样输出,d是see随机种子,name是名称,output_dtype是用于输出的整数类型。默认为int64。
c = tf.zeros([2,5])
b = tf.multinomial(c, 1)  # b = [[2], [4]] 或者是其他值
tf.random_gamma
tf.random_gamma(shape, alpha, beta=None, dtype=tf.float32, seed=None, name=None)
返回具有Gamma分布的随机值。参数shape是一维整型张量或Python数组,alpha 提供描述要采样的伽马分布的形状参数,beta提供要采样的伽玛分布的反比例参数,dtype是类型,seed是随机种子,name是名称。
samples = tf.random_gamma([10], [0.5, 1.5])   #samples的形状是[10,2],其中每个切片[:,0]和[:,1]表示从每个分布中抽取的样本值
tf.set_random_seed
tf.set_random_seed(seed)
设置图形级别(graph-level)的随机种子。
依赖随机种子的操作(Op)实际上是从两个种子派生出来的:图形级别和操作级别(operation-level )种子。
图形级别种子与操作级别种子的交互如下:
1.如果图表级别和操作种子都没有设置:一个随机种子用于这个操作。
2.如果设置了图层级别种子,但操作级别种子没有设置:系统确定性地选择与图层种子结合的操作种子,这样得到唯一的随机序列。
3.如果未设置图层级别种子,但操作级别种子已设置:使用默认的图层种子和指定的操作种子来确定随机序列。
4.如果图形级和操作种子都设置好了:两个种子联合使用以确定随机序列。

想知道什么是随机种子?请移步这里: https://blog.csdn.net/yishouwangnian/article/details/52766609

参考文档:


猜你喜欢

转载自blog.csdn.net/chinagreenwall/article/details/80772692