tensorflow随机张量创建
TensorFlow 有几个操作用来创建不同分布的随机张量。注意随机操作是有状态的,并在每次评估时创建新的随机值。
下面是一些相关的函数的介绍:
- tf.random_normal
从正态分布中输出随机值。
random_normal(
shape,
mean=0.0,
stddev=1.0,
dtype=tf.float32,
seed=None,
name=None
)
args:
shape:一维整数或 Python 数组表示输出张量的形状。
mean:dtype 类型的0-D张量或 Python 值表示正态分布的均值。
stddev:dtype 类型的0-D张量或 Python 值表示正态分布的标准差。
dtype:输出的类型。
seed:一个 Python 整数。用于为分发创建一个随机种子。
name:操作的名称(可选)。
返回:将返回一个指定形状的张量,通过符合要求的随机值填充。
- tf.truncated_normal
生成的值遵循具有指定平均值和标准差的正态分布,和tf.random_normal不同之处在于其平均值大于 2 个标准差的值将被丢弃并重新选择。
tf.truncated_normal(
shape,
mean=0.0,
stddev=1.0,
dtype=tf.float32,
seed=None,
name=None
)
args:
shape:一维整数或 Python 数组表示输出张量的形状。
mean:dtype 类型的 0-D 张量或 Python 值表示截断正态分布的均值。
stddev:dtype 类型的 0-D 张量或 Python 值表示截断前正态分布的标准偏差。
dtype:输出的类型。
seed:一个 Python 整数。用于为分发创建随机种子。
name:操作的名称(可选)。
返回:
函数返回指定形状的张量,通过随机截断的符合要求的值填充。
- tf.random_uniform
从均匀分布中输出随机值。
random_uniform(
shape,
minval=0,
maxval=None,
dtype=tf.float32,
seed=None,
name=None
)
生成的值在该 [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
随机地将张量沿其第一维度打乱。
random_shuffle(
value,
seed=None,
name=None
)
张量沿着维度0被重新打乱,使得每个 value[i][j] 被映射到唯一一个 output[m][j]。例如,一个 3x2 张量可能出现的映射是:
[[1, 2], [[5, 6],
[3, 4], ==> [1, 2],
[5, 6]] [3, 4]]
args:
value:将被打乱的张量。
seed:一个 Python 整数。用于为分布创建一个随机种子。
name:操作的名称(可选)。
返回:
与 value 具有相同的形状和类型的张量,沿着它的第一个维度打乱。
- tf.random_crop
随机地将张量裁剪为给定的大小。
random_crop(
value,
size,
seed=None,
name=None
)
以一致选择的偏移量将一个形状 size 部分从 value 中切出。需要的条件:value.shape >= size。
如果大小不能裁剪,请传递该维度的完整大小。例如,可以使用 size = [crop_height, crop_width, 3] 裁剪 RGB 图像。
cifar10中就有利用该函数随机裁剪24*24大小的彩色图片的例子,代码如下:
distorted_image = tf.random_crop(reshaped_image, [height, width, 3])
args:
- value:向裁剪输入张量。
- size:一维张量,大小等级为 value。
- seed:Python 整数。用于创建一个随机的种子。
- name:此操作的名称(可选)。
返回:
与 value 具有相同的秩并且与 size 具有相同形状的裁剪张量。
- tf.multinomial
从多项式分布中抽取样本。
multinomial(
logits,
num_samples,
seed=None,
name=None
)
args:
- logits:形状为 [batch_size, num_classes] 的二维张量;每个切片:[i, :] 表示所有类的非标准化对数概率。
- num_samples:0维张量。为每行切片绘制的独立样本数。
- seed:Python整数。用于为分发创建一个随机种子。
- name:操作的名称(可选)。
返回:
返回绘制样品的形状 [batch_size, num_samples]。
- tf.random_gamma
从每个给定的伽玛分布中绘制 shape 样本。一般对这个函数不是很理解,详细查看伽玛分布原理。此处仅作介绍。
random_gamma(
shape,
alpha,
beta=None,
dtype=tf.float32,
seed=None,
name=None
)
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。作用在于可以在不同的图中重复那些随机变量的值。
set_random_seed(seed)
可以从两个seed中获得依赖随机seed的操作:图形级seed和操作级seed。seed必须是整数,对大小没有要求,只是作为图形级和操作级标记使用,本节将介绍如何设置图形级别的seed。
它与操作级别seed的关系如下:
- 如果既没有设置图层级也没有设置操作级别的seed:则使用随机seed进行该操作。
- 如果设置了图形级seed,但操作seed没有设置:系统确定性地选择与图形级seed结合的操作seed,以便获得唯一的随机序列。
- 如果未设置图形级seed,但设置了操作seed:使用默认的图层seed和指定的操作seed来确定随机序列。
- 如果图层级seed和操作seed都被设置:则两个seed将一起用于确定随机序列。
具体来说,使用seed,牢记以下三点:
- 要在会话中不同图中生成不同的序列,请不要设置图层级别seed或操作级别seed;
- 要为会话中的操作在不同图中生成相同的可重复序列,请为该操作设置seed;
- 要使所有操作生成的随机序列在会话中的不同图中都可重复,请设置图形级别seed;
#-*-coding:utf-8-*-
#不同情况请注释或取消注释相关语句
import tensorflow as tf
#第一种情形:无seed
a = tf.random_uniform([1])
#第二种情形:操作级seed
#a = tf.random_uniform([1], seed=-8)
#第三种情形:图层级seed
#tf.set_random_seed(1234)
#a = tf.random_uniform([1])
b = tf.random_normal([1]) tf.global_variables_initializer() print("Session 1")
with tf.Session() as sess1:
print(sess1.run(a)) # a1
print(sess1.run(a)) # a2
print(sess1.run(b)) # b1
print(sess1.run(b)) # b2 print("Session 2")
with tf.Session() as sess2:
print(sess2.run(a)) # a3(第一种情形a1!=a3;第二种情形a1==a3;第三种情形a1==a3)
print(sess2.run(a)) # a4(同上)
print(sess2.run(b)) # b3(第一种情形b1!=b3;第二种情形b1!=b3;第三种情形b1==b3)
print(sess2.run(b)) # b4(同上)
上述函数都含有seed参数,属于操作级seed。
示例:
#-*-coding:utf-8-*-
#随机问题每次运行的结果都不大一样
import tensorflow as tf x= tf.multinomial(tf.log([[10., 10.]]), 5)
y=tf.random_normal([2,3],mean=1,stddev=3)
z=tf.truncated_normal([2,3],mean=1,stddev=3)
w=tf.random_uniform([1,3],9,16)
v=tf.random_shuffle([[1,2,3],[4,5,6]])
u=tf.random_crop([[2,4,6],[9,8,0]],[2,2])
a = tf.constant([[1., 2., 3., 4., 1.], [3., 2., 3., 4., 3.]], name='a')
b = tf.multinomial(a, 1, name='b')
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print (sess.run(x))
print (sess.run(y))
print (sess.run(z))
print (sess.run(w))
print (sess.run(v))
print (sess.run(u))
print (sess.run(a))
print (sess.run(b))
不得不提的是,严谨点,上述代码虽然简单,但都没有在最后sess.close,关闭图并且释放其占用的内存,又或者用with语句块,读者不妨加上。
tensorflow随机张量创建的更多相关文章
- TensorFlow随机值函数:tf.random_uniform
tf.random_uniform 函数 random_uniform( shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name ...
- TensorFlow随机值:tf.random_normal函数
tf.random_normal 函数 random_normal( shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=No ...
- TensorFlow之张量
张量的概念 TensorFlow中的Tensor就是张量,张量是数学对象,是对标量.向量.矩阵的泛化.我们可以直接理解成张量就是列表,就是多维数组. 张量的维数用阶来表示: 0阶张量 标量 单个值 例 ...
- 使用TensorFlow v2张量的一个简单的“hello world”示例
使用TensorFlow v2张量的一个简单的"hello world"示例 import tensorflow as tf # 创建一个张量 hello = tf.constan ...
- Tensorflow描述张量的维度:阶,形状以及维数
张量 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通. 阶 在TensorFl ...
- tensorflow中张量的理解
自己通过网上查询的有关张量的解释,稍作整理. TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中 ...
- tensorflow 使用tfrecords创建自己数据集
直接采用矩阵方式建立数据集见:https://www.cnblogs.com/WSX1994/p/10128338.html 制作自己的数据集(使用tfrecords) 为什么采用这个格式? TFRe ...
- 109、TensorFlow计算张量的值
# 当计算图创建成功时 # 你就可以运行这个计算图,然后生成一个新的张量 # 并且得到这个张量指向的计算图中具体的数值 #这个功能在debug的时候非常有必要 #最简单获得张量具体值的方法是使用Ten ...
- Tensorflow学习教程------创建图启动图
Tensorflow作为目前最热门的机器学习框架之一,受到了工业界和学界的热门追捧.以下几章教程将记录本人学习tensorflow的一些过程. 在tensorflow这个框架里,可以讲是若数据类型,也 ...
随机推荐
- ContentProvider示例
http://hi.baidu.com/pekdou/item/b2a070c37552af210831c678 首先,我自己是各初学者,网上一些关于ContentProvider的例子也不少,我自己 ...
- 20135220谈愈敏Linux Book_1&2
第一章 Linux内核简介 从unix的历史视角来认识Linux内核与Linux操作系统的前世今生. Unix历史 贝尔实验室设计的一个文件系统原型逐渐演化而成Unix,而后Unix操作系统用C语言重 ...
- ThinkPHP框架知识(比较全的知识)
php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...
- 剑指offer:数组中出现次数超过一半的数
题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2 ...
- OpenFlow PacketOut消息机制
OpenFlow PacketOut消息机制 前言 由于最近实验的进行,遇到一个比较棘手的问题,就是利用控制器主动发送packet消息的问题,期间遇到一些问题,后来在RYU群中得到群友左木的帮助成功解 ...
- win10下装上virtualbox 以及在virtualbox上装上 ubuntu 12.04
首先要下载virtual 在win10下可能第一步你就遇到了麻烦 首先刚开始我装的是最新版本的virtualbox 5.0.24.8355 (直接百度就可搜到) 然后可以按照这个教程 http://j ...
- 黄金分割点(第五周 c语言版)
在上一周,学习其他课程的同时,用C语言编写了黄金分割点小游戏.因为要做界面需要mfc,当时学的时候还做了个简单的计算器.目前c++的知识忘的差不多了,所以就先用C语言来实现算法.打算接下来的一周复习c ...
- 从零开始学Kotlin-扩展函数(10)
从零开始学Kotlin基础篇系列文章 什么是扩展函数 扩展函数数是指在一个类上增加一种新的行为,我们甚至没有这个类代码的访问权限: Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 ...
- Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景
我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...
- Django_博客_XSS 攻击防范
背景: 博客项目中用户后台添加文章时,若通过富文本编辑器输入 标签内容或者 js 指令会导致文章排版错乱,甚至进行XSS攻击 攻击现象: 文本内容输入 js 指令 文章描述时正确显示其文本内容 但在打 ...