您的位置:首页 > 其它

TensorFlow教程——常用函数解析

2017-11-16 19:56 1086 查看
以下函数均返回一个Tensor对象,类似矩阵数据,包括单个值,向量,多维矩阵。

基本的两个创建常量Tensor的函数

tf.constant(value, dtype=None, shape=None, name="Const", verify_shape=False)


根据value和shape来创建一个常量Tensor。value可以是一个数,也可以是一个list。 如果是一个数,那么这个常量中所有值的按该数来赋值; 如果是list,那么len(value)一定要小于等于shape展开后的长度,赋值时,先将value中的值逐个存入,不够的部分,则全部存入value的最后一个值。若verify_shape为True,则value的数量跟shape的不一致时会报错。

tf.fill(dims, value, name=None)


跟tf.constant()类似,不过这里的value只能是一个数

类似Numpy的函数

tf.zeros(shape, dtype=dtypes.float32, name=None)

tf. zeros_like(tensor, dtype=None, name=None, optimize=True) # 根据tensor的shape生成全0的Tensor

tf.ones(shape, dtype=dtypes.float32, name=None)

tf.ones_like(tensor, dtype=None, name=None, optimize=True) # 根据tensor的shape生成全1的Tensor

tf.range(start, limit=None, delta=1, dtype=None, name="range") # 范围[start, limit),步长delta

tf.lin_space(start, stop, num, name=None) # 范围[start, stop],num个数


随机生成常量

1. 均匀分布

tf.random_uniform(shape, minval=0, maxval=None, dtype=dtypes.float32, seed=None, name=None)


产生均匀分布样本,范围为[minval, maxval]。

2. 正态分布

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=dtypes.float32, seed=None, name=None)


随机产生正态分布样本,均值mean,标准差stddev,默认生成标准正态分布。

3. 截断正态分布

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=dtypes.float32, seed=None, name=None)


随机产生截断正态分布样本,跟上一函数差不多,不过只保留[mean-2*stddev, mean+2*stddev]范围内的样本 ,不在此范围的重新生成,默认[-2, 2]。

4. 伽马分布

tf.random_gamma(shape, alpha, beta=None, dtype=dtypes.float32, seed=None, name=None)


随机产生Gamma分布样本。

伽马分布密度函数:

g(t)=λαΓ(α)tα−1e−λt,t≥0

其中Γ(α)是伽马函数:

Γ(α)=∫+∞0uα−1e−udu,α>0

伽马函数是阶乘在实数域的拓展,它的来源可参考神奇的伽玛函数

Γ(1)=∫+∞0e−udu=−e−u|+∞0=0

Γ(2)=∫+∞0ue−udu=−e−u|+∞0=1

Γ(3)=∫+∞0u2e−udu=−e−u|+∞0=2

Γ(3.5)=∫+∞0u2.5e−udu≈3.32

对于正整数来说,Γ(n)=(n−1)! 。

Python求微积分可以用
sympy
库。

伽马分布密度函数有两个参数:α和λ,其中α表示事件发生的次数,λ表示平均每次事件发生的时间间隔。例如我们对地震发生的时间间隔进行建模,则α=1和λ=10的伽马分布密度函数,刻画的是平均10小时发生一次地震的某地区的发震时间间隔的概率分布,比如函数图像在[0,5]上的面积表示5小时发生一次地震的概率。

伽马分布密度函数图像分析:当α≤1时,函数图像都是悬崖状曲线(单调递减),当α>1时,函数图像都是山峰状曲线(凸函数);λ的变化不会改变函数图像的形状,而是随着λ的增大,函数图像向右“挤压”。因此,α又叫做形状参数(Shape Parameter),λ又叫做尺度参数(Scale Parameter)

5. 多项式分布

tf.multinomial(logits, num_samples, seed=None, name=None)


模拟多项式分布。logits是二维矩阵,每一行代表结果概率分布。num_samples代表独立实验次数。例如抛一枚不均匀的骰子10次,每个面的概率为[1/12, 1/12, 1/12, 3/12, 3/12, 3/12]。

tf.multinomial([[1.0, 1.0, 1.0, 3.0, 3.0, 3.0]], 10)
,可能得到:
[[4 4 4 2 4 0 2 3 5 4]]
,5个5点,2个3点,1个1点,1个4点,1个6点。

随机洗牌

tf.random_shuffle(value, seed=None, name=None)


Randomly shuffles a tensor along its first dimension. 想象成洗牌,如value=[[1, 2], [3, 4], [5, 6]],可能返回[[3, 4], [5 6], [1, 2]]

随机裁剪

tf.random_crop(value, size, seed=None, name=None)


Randomly crops a tensor to a given size. 随机裁剪,想象随机裁剪一幅图像,因此需要
value.shape>=size
。如
tf.random_crop([[1, 2, 3], [4, 5, 6], [7, 8, 9]], size=(2, 2))
,可能返回
[[5, 6], [8,9]]


运行

查看常量的值需要InteractiveSession:

import tensorflow as tf

a = tf.random_normal(shape=(5, 5))

tf.InteractiveSession()
print a.eval()


以上笔记部分摘抄自:

http://blog.csdn.net/u012969412/article/details/62044184
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息