TensorFlow 有几个操作用来创建不同分布的随机张量。注意随机操作是有状态的,并在每次评估时创建新的随机值。

下面是一些相关的函数的介绍:

  • tf.random_normal

从正态分布中输出随机值。

  1. random_normal(
  2. shape,
  3. mean=0.0,
  4. stddev=1.0,
  5. dtype=tf.float32,
  6. seed=None,
  7. name=None
  8. )

args:

shape:一维整数或 Python 数组表示输出张量的形状。

mean:dtype 类型的0-D张量或 Python 值表示正态分布的均值。

stddev:dtype 类型的0-D张量或 Python 值表示正态分布的标准差。

dtype:输出的类型。

seed:一个 Python 整数。用于为分发创建一个随机种子。

name:操作的名称(可选)。

返回:将返回一个指定形状的张量,通过符合要求的随机值填充。

  • tf.truncated_normal

生成的值遵循具有指定平均值和标准差的正态分布,和tf.random_normal不同之处在于其平均值大于 2 个标准差的值将被丢弃并重新选择。

  1. tf.truncated_normal(
  2. shape,
  3. mean=0.0,
  4. stddev=1.0,
  5. dtype=tf.float32,
  6. seed=None,
  7. name=None
  8. )

args:

shape:一维整数或 Python 数组表示输出张量的形状。

mean:dtype 类型的 0-D 张量或 Python 值表示截断正态分布的均值。

stddev:dtype 类型的 0-D 张量或 Python 值表示截断前正态分布的标准偏差。

dtype:输出的类型。

seed:一个 Python 整数。用于为分发创建随机种子。

name:操作的名称(可选)。

返回:

函数返回指定形状的张量,通过随机截断的符合要求的值填充。

  • tf.random_uniform

从均匀分布中输出随机值。

  1. random_uniform(
  2. shape,
  3. minval=0,
  4. maxval=None,
  5. dtype=tf.float32,
  6. seed=None,
  7. name=None
  8. )

生成的值在该 [minval, maxval) 范围内遵循均匀分布。下限 minval 包含在范围内,而上限 maxval 被排除在外。

args:

shape:一维整数或 Python 数组表示输出张量的形状。

minval:dtype 类型的 0-D 张量或 Python 值;生成的随机值范围的下限;默认为0。

maxval:dtype 类型的 0-D 张量或 Python 值。要生成的随机值范围的上限。如果 dtype 是浮点,则默认为1 。

dtype:输出的类型:float16、float32、float64、int32、orint64。

seed:一个 Python 整数。用于为分布创建一个随机种子。

name:操作的名称(可选)。

返回:

用于填充随机均匀值的指定形状的张量。

  • tf.random_shuffle

随机地将张量沿其第一维度打乱。

  1. random_shuffle(
  2. value,
  3. seed=None,
  4. name=None
  5. )

张量沿着维度0被重新打乱,使得每个 value[i][j] 被映射到唯一一个 output[m][j]。例如,一个 3x2 张量可能出现的映射是:

  1. [[1, 2], [[5, 6],
  2. [3, 4], ==> [1, 2],
  3. [5, 6]] [3, 4]]

args:

value:将被打乱的张量。

seed:一个 Python 整数。用于为分布创建一个随机种子。

name:操作的名称(可选)。

返回:

与 value 具有相同的形状和类型的张量,沿着它的第一个维度打乱。

  • tf.random_crop

随机地将张量裁剪为给定的大小。

  1. random_crop(
  2. value,
  3. size,
  4. seed=None,
  5. name=None
  6. )

以一致选择的偏移量将一个形状 size 部分从 value 中切出。需要的条件:value.shape >= size。

如果大小不能裁剪,请传递该维度的完整大小。例如,可以使用 size = [crop_height, crop_width, 3] 裁剪 RGB 图像。

cifar10中就有利用该函数随机裁剪24*24大小的彩色图片的例子,代码如下:

  1. distorted_image = tf.random_crop(reshaped_image, [height, width, 3])

args:

  • value:向裁剪输入张量。
  • size:一维张量,大小等级为 value。
  • seed:Python 整数。用于创建一个随机的种子。
  • name:此操作的名称(可选)。

返回:

与 value 具有相同的秩并且与 size 具有相同形状的裁剪张量。

  • tf.multinomial

从多项式分布中抽取样本。

  1. multinomial(
  2. logits,
  3. num_samples,
  4. seed=None,
  5. name=None
  6. )

args:

  • logits:形状为 [batch_size, num_classes] 的二维张量;每个切片:[i, :] 表示所有类的非标准化对数概率。
  • num_samples:0维张量。为每行切片绘制的独立样本数。
  • seed:Python整数。用于为分发创建一个随机种子。
  • name:操作的名称(可选)。

返回:

返回绘制样品的形状 [batch_size, num_samples]。

  • tf.random_gamma

从每个给定的伽玛分布中绘制 shape 样本。一般对这个函数不是很理解,详细查看伽玛分布原理。此处仅作介绍。

  1. random_gamma(
  2. shape,
  3. alpha,
  4. beta=None,
  5. dtype=tf.float32,
  6. seed=None,
  7. name=None
  8. )

alpha 是形状参数,beta 是尺度参数。

args:

shape:一维整数张量或 Python 数组。输出样本的形状是按照 alpha/beta-parameterized 分布绘制的。

alpha:一个张量或者 Python 值或者 dtype 类型的 N-D 数组。

beta:一个张量或者 Python 值或者 dtype 类型的 N-D 数组,默认为1。

dtype:alpha、beta 的类型,输出:float16,float32 或 float64。

seed:一个 Python 整数。用于为分布创建一个随机种子。

name:操作的名称(可选)。

返回:

samples:具有 dtype 类型值的带有形状 tf.concat(shape, tf.shape(alpha + beta)) 的 Tensor。

  • tf.set_random_seed

设置图形级随机seed。作用在于可以在不同的图中重复那些随机变量的值。

  1. set_random_seed(seed)

可以从两个seed中获得依赖随机seed的操作:图形级seed和操作级seed。seed必须是整数,对大小没有要求,只是作为图形级和操作级标记使用,本节将介绍如何设置图形级别的seed。

它与操作级别seed的关系如下:

  1. 如果既没有设置图层级也没有设置操作级别的seed:则使用随机seed进行该操作。
  2. 如果设置了图形级seed,但操作seed没有设置:系统确定性地选择与图形级seed结合的操作seed,以便获得唯一的随机序列。
  3. 如果未设置图形级seed,但设置了操作seed:使用默认的图层seed和指定的操作seed来确定随机序列。
  4. 如果图层级seed和操作seed都被设置:则两个seed将一起用于确定随机序列。

具体来说,使用seed,牢记以下三点:

  1. 要在会话中不同图中生成不同的序列,请不要设置图层级别seed或操作级别seed;
  2. 要为会话中的操作在不同图中生成相同的可重复序列,请为该操作设置seed;
  3. 要使所有操作生成的随机序列在会话中的不同图中都可重复,请设置图形级别seed;
  1. #-*-coding:utf-8-*-
  2. #不同情况请注释或取消注释相关语句
  3. import tensorflow as tf
  4. #第一种情形:无seed
  5. a = tf.random_uniform([1])
  6. #第二种情形:操作级seed
  7. #a = tf.random_uniform([1], seed=-8)
  8. #第三种情形:图层级seed
  9. #tf.set_random_seed(1234)
  10. #a = tf.random_uniform([1])
  11. b = tf.random_normal([1])
  12.  
  13. tf.global_variables_initializer()
  14.  
  15. print("Session 1")
  16. with tf.Session() as sess1:
  17. print(sess1.run(a)) # a1
  18. print(sess1.run(a)) # a2
  19. print(sess1.run(b)) # b1
  20. print(sess1.run(b)) # b2
  21.  
  22. print("Session 2")
  23. with tf.Session() as sess2:
  24. print(sess2.run(a)) # a3(第一种情形a1!=a3;第二种情形a1==a3;第三种情形a1==a3)
  25. print(sess2.run(a)) # a4(同上)
  26. print(sess2.run(b)) # b3(第一种情形b1!=b3;第二种情形b1!=b3;第三种情形b1==b3)
  27. print(sess2.run(b)) # b4(同上)

上述函数都含有seed参数,属于操作级seed。

示例:

  1. #-*-coding:utf-8-*-
  2. #随机问题每次运行的结果都不大一样
  3. import tensorflow as tf
  4.  
  5. x= tf.multinomial(tf.log([[10., 10.]]), 5)
  6. y=tf.random_normal([2,3],mean=1,stddev=3)
  7. z=tf.truncated_normal([2,3],mean=1,stddev=3)
  8. w=tf.random_uniform([1,3],9,16)
  9. v=tf.random_shuffle([[1,2,3],[4,5,6]])
  10. u=tf.random_crop([[2,4,6],[9,8,0]],[2,2])
  11. a = tf.constant([[1., 2., 3., 4., 1.], [3., 2., 3., 4., 3.]], name='a')
  12. b = tf.multinomial(a, 1, name='b')
  13. sess = tf.Session()
  14. sess.run(tf.global_variables_initializer())
  15. print (sess.run(x))
  16. print (sess.run(y))
  17. print (sess.run(z))
  18. print (sess.run(w))
  19. print (sess.run(v))
  20. print (sess.run(u))
  21. print (sess.run(a))
  22. print (sess.run(b))

不得不提的是,严谨点,上述代码虽然简单,但都没有在最后sess.close,关闭图并且释放其占用的内存,又或者用with语句块,读者不妨加上。

tensorflow随机张量创建的更多相关文章

  1. TensorFlow随机值函数:tf.random_uniform

    tf.random_uniform 函数 random_uniform( shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name ...

  2. TensorFlow随机值:tf.random_normal函数

    tf.random_normal 函数 random_normal( shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=No ...

  3. TensorFlow之张量

    张量的概念 TensorFlow中的Tensor就是张量,张量是数学对象,是对标量.向量.矩阵的泛化.我们可以直接理解成张量就是列表,就是多维数组. 张量的维数用阶来表示: 0阶张量 标量 单个值 例 ...

  4. 使用TensorFlow v2张量的一个简单的“hello world”示例

    使用TensorFlow v2张量的一个简单的"hello world"示例 import tensorflow as tf # 创建一个张量 hello = tf.constan ...

  5. Tensorflow描述张量的维度:阶,形状以及维数

    张量 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通. 阶 在TensorFl ...

  6. tensorflow中张量的理解

    自己通过网上查询的有关张量的解释,稍作整理. TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中 ...

  7. tensorflow 使用tfrecords创建自己数据集

    直接采用矩阵方式建立数据集见:https://www.cnblogs.com/WSX1994/p/10128338.html 制作自己的数据集(使用tfrecords) 为什么采用这个格式? TFRe ...

  8. 109、TensorFlow计算张量的值

    # 当计算图创建成功时 # 你就可以运行这个计算图,然后生成一个新的张量 # 并且得到这个张量指向的计算图中具体的数值 #这个功能在debug的时候非常有必要 #最简单获得张量具体值的方法是使用Ten ...

  9. Tensorflow学习教程------创建图启动图

    Tensorflow作为目前最热门的机器学习框架之一,受到了工业界和学界的热门追捧.以下几章教程将记录本人学习tensorflow的一些过程. 在tensorflow这个框架里,可以讲是若数据类型,也 ...

随机推荐

  1. 《Linux内核 》MOOC 课程

    姬梦馨 原创微博 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习笔记 一:什么是冯诺依曼体系结构? ...

  2. Linux内核分析——计算机是如何工作的

    马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机是如何工作的 ( ...

  3. c# dataGridView cell添加下拉框

    应用场景: dataGridView需要某一个cell变成下拉框样式. 思路详解: dataGridVie添加固定格式的row. 代码: DataGridViewRow row = new DataG ...

  4. ElasticSearch搜索实例含高亮显示及搜索的特殊字符过滤

    应用说明见代码注解. 1.简单搜索实例展示: public void search() throws IOException { // 自定义集群结点名称 String clusterName = & ...

  5. Jenkins发送邮件中文乱码问题解决

    在环境变量中添加: JAVA_TOOL_OPTIONS  =  -Dfile.encoding=UTF8 配置好后,重启Jenkins即可

  6. code first 如何创建索引字段

    比较简单的办法: protected override void Seed(Context context) { CreateIndex(context, "ProductName" ...

  7. BZOJ 3174 拯救小矮人(贪心+DP)

    题意 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚到肩 ...

  8. 51nod 1463 找朋友 (扫描线+线段树)

    1463 找朋友  基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 给定: 两个长度为n的数列A .B 一个有m个元素的集合K 询问Q次 每次询 ...

  9. Day18-前端和后端怎么区分

    前端 - 通常是针对浏览器而开发的,是在浏览器端运行的程序,而后端 - 针对的是服务器,准确的来说应该是服务器端开发.前端开发偏向于用户体验,比较直观,服务器端开发偏向于性能. 前端和后端指的是网站建 ...

  10. MT【170】裂项相消

    已知$a,b>0$证明:$\dfrac{1}{a+2b}+\dfrac{1}{a+4b}+\dfrac{1}{a+6b}<\dfrac{3}{\sqrt{(a+b)(a+7b)}}$ 证明 ...