神经网络参数与tensorflow变量

神经网络中的参数,包括权重、偏置等等,tensorflow是如何保存使用这些参数的呢?事实上在tensorflow中,用变量tf.Variable保存和使用这些参数,和其他语言类似,tensorflow中的变量在使用时也需要指定初始值,一般使用随机数给tensorflow中的变量初始化。

Weights = tf.Variable(tf.random_normal([2,3],stddev=2))

通常在c语言中,我们定义一个变量时会用到如下函数:

int a = 2 #定义一个整形变量a,并初始化a的值为2

而在python中呢:

a = 2

不需要做任何类型声明,这也是python的优势所在。

而我们上面在tensorflow中定义的weights变量呢,用到tf.Variable变量声明函数:下面是在python交互式环境jupyter的编译器下,官方给出的变量声明函数的用法:

可以看到:括号内第一个参数赋初始值之外,还需要指定大量其他参数,我们暂且不讨论,在这赋初始值我们用到了tf.random_normal()函数,同样,给出这个函数的用法:

我在这解释下这个函数,tf.random_normal()函数:从正态分布中输出随机值,这个值可以是常数或者n维数组,可以看到函数的参数指定了函数的几个属性:shape:输出值的维度,类似于之前提到的张量。mean=0.0,意思是输出的元素的均值是0,stdeev = 1,意思是输出的元素的标准差是1。当然这些都是默认值,我们可以根据自己的实际需要指定。我之所以把它这么详细的写出来,就是为了提醒大家,当大家在以后的学习中,遇到自己没有使用过的函数时,一定要自己亲自去查一查,具体的函数用法,这样不断的积累,不断的使用,就会越来越熟悉。这里提到的是正态分布的随机数,除了正态分布随机数,还有一些其他随机数生成器下面列出tensorflow支持的所有随机数生成器:

函数名随机数分布主要参数
tf.random_normal正态分布平均值、标准差、取值类型
tf.truncated_normal正态分布,如果随机出来的值偏离平均值超过2个标准差,这个数将会被重新随机平均值、标准差、取值类型
tf.random_uniform均匀分布最小、最大取值,取值类型
tf.random_gamma伽马分布形状参数aplha,尺寸参数beta,取值类型

此外,tensorflow还支持常数声明来初始化变量。

函数名称功能样例
tf.zeros(别丢了s)产生全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.fill([2,3],9)---------[[9,9,9],[9,9,9]]
tf.constant产生一个给定值的常量tf.constant([1,2,3])----[1,2,3]
在神经网络中,我们通常会使用常数来设置偏置项初始值。除了随机数和常数,tensorflow还支持通过使用其他变量的初始值来初始化新的变量。下面给出相关代码:
w2 = tf.Variable(w1.initialized_value())#把w1的初始值赋给w2
w3 = tf.Variable(w1.initialized_value()*3)#把w1的初始值的2倍赋值给w3

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页