tensorflow学习(3):初始化

一、随机数生成函数

  1. tf.truncated_normal(shape, mean, stddev)
    shape表示生成张量的维度,mean是均值,stddev是标准差。这个函数产生正太分布(严格的说是高斯分布),均值和标准差自己设定。
    这是一个截断的产生正太分布的函数,就是说产生正太分布的值如果与均值的差值大于两倍的标准差,那就重新生成。
    和一般的正太分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。

  2. tf.random_normal(shape, mean, stddev,seed) ,和上面的tf.truncated_normal区别是:
    tf.truncated_normal的输出如字面意思是截断的,而截断的标准是2倍的stddev。
    举例,当输入参数mean = 0 , stddev =1时,
    使用tf.truncated_normal的输出是不可能出现[-2,2]以外的点的,
    而如果shape够大的话,tf.random_normal却会产生2.2或者2.4之类的输出。
    注:将seed设置成相同的值,会导致几次随机产生的值是相同的

  3. tf.random_uniform():平均分布;需要指定最大值,最小值,取值类型

  4. tf.random_gamma():gamma分布
    需要指定形状参数alpha,尺度参数beta,取值类型需要指定形状参数alpha,尺度参数beta,取值类型

二、常数生成函数

相比于随机数生成函数,常数生成函数的参数要简单很多,而且容易记忆(不过在随机数生成函数里面,一般用的比较多的也就是正态分布,也只需要记忆均值和方差即可,而且一般初始化的时候都希望均值为0)
常数生成函数参数一般为2个,shape和类型

函数名称 功能 样例
tf.zeros 产生全0数组 tf.zeros([2,3],int32)–>[[0,0,0],[0,0,0]]
tf.ones 产生全1数组 tf.ones([2,3],int32)–>[[1,1,1],[1,1,1]]
tf.fill 产生给定常数的数组 tf.zeros([2,3],9)–>[[9,9,9],[9,9,9]]
tf.constant 产生一个给定值的常量 tf.constant([1,2,3])–>[1,2,3]

三、其他

虽然在变量定义时给出了变量初始化的方法,但这个方法并没有被真正运行,此时保留在tensor中的并没有数字,而只是保留了shape,type,name这三个关键元素,要运行初始化,tensorflow提供 了一个函数:
tf.global_variables_initializer()
虽然非常长,但是根据字面意思还是能记忆的。
如下是一个完整的初始化方式:(假设是一个三层网络)

import tensorflow as tf
w1 = tf.Variables(tf.random_normal([2,3]))
w2 = tf.Variables(tf.random_normal([3,1]))
x = tf.constant([10,20])
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
with tf.Session() as sess:
	init_op = tf.global_variables_initialized()
	sess.run(y)  #输出y值

猜你喜欢

转载自blog.csdn.net/shanlepu6038/article/details/84478436