Tensorflow深度学习实战之(三)--变量的定义以及初始化


一、变量的定义

Tensorflow中的变量是特殊的张量,它可以是任何一个类型和形状的张量,与张量不同的是变量存在于会话调用的上下文之外,变量的主要作用是保存和更新模型的参数。

声明变量的函数形式为:tf.Variable(initial_value, trainable=True, collections=None, validate_shape=True, name=None)
参数含义如下:
1、initial_value:必选指定变量的初始值,类型可以是tensor的所类型。
2、trainable:(可选)变量是否可以训练,默认为true则在模型训练的过程中变量的值会随着训练的过程而不断的更新
3、collections:可选指定该计算图变量的类型,默认为GraphKeys.GLOBAL_VARIABLES(即全局变量)
4、validate_shape:可选默认为True则在运行过程中变量的形状不可变换,若要稍后更改变量的形状必须设置为False
5、name:可选,变量的名称,如果没有指定则系统会自动分配一个唯一的值。

在定义变量的过程中还可以使用Tensorflow提供的其他函数进行定义,

函数形式含义
tf.assign(tensor, value)将value的值赋给tensor张量
tf.assign_add(tensor, value)将tensor的值与value的值相加

Tensorflow中若使用变量则需要在定义变量后使用函数 tf.global_variables_initializer() 进行变量的全局初始化操作

import tensorflow as tf
a = tf.Variable(tf.constant(0.0),dtype=tf.float32)
b = tf.assign(a,10)
c = b
init_op = tf.global_variables_initializer()  #进行全局初始化所有变量
with tf.Session() as sess:
 sess.run(init_op)  #在该会话管理器中进行全局初始化
 print(a.eval())            #相当于print(sess.run(a))
 print(b.eval())            #相当于print(sess.run(b))
 print(sess.run(c))

输出结果为:

0.0
10.0
10.0

tf.Tensor.eval()函数也需要在默认的会话或者指定的会话中使用,返回指定张量的取值,更加具体的介绍见tf.Tensor.eval()函数使用的介绍

二、参数初始化变量

1.使用常量来初始化变量

Tensorflow通过 tf.constant_initializer(value) 函数生成一个值为常量的tensor对象,然后调用tf.get_variable() 函数初始化指定类型进行初始化为常量的变量。

  1. tf.zeros_initializer() 用来初始化全0的tensor对象;tf.ones_initializer() 用来初始化全1的tensor对象
  2. tf.constant_initializer(value, dtype, veryfy_value=False),其中第三个参数是布尔值默认为False,用于验证数值的形状,若为True时如果值的形状与初始张量的形状不兼容,则初始值设定项将引发错误。
  3. tf.get_variable(name, shape, initializer), 用来初始化或获取变量,或用该函数声明 name 两个名称一致的变量时程序运行会报错,因此具有变量检查机制属性
    name:必填,变量的名称 (注意该参数与tf.Variable()创建变量的方式不同!!!)
    shape:必填,变量的形状
    initializer:初始化器,指定变量的初始值
import tensorflow as tf
value = [0,1,2,3,4,5,6,7]
init = tf.constant_initializer(value) #将数组初始化常量
x = tf.get_varialbe('x', shape=[2,4], initializer=init) #初始化获取初始值值为常量的变量
with tf.Session() as sess:
 sess.run(x.initializer) #在该会话管理器中进行全局初始化
 print(x.eval())

输出结果为:

[[0. 1. 2. 3.]
 [4. 5. 6. 7.]]

2.初始化形状为正态分布的变量

变量初始化为符合正态分布的某种形状,Tensorflow提供了三种初始化函数:

  1. tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32,seed=None) ,该函数产生一个符合正太分布的变量,其参数含义为:
    shape:必选,生成张量的形状
    mean:可选,正太分布均值为0,默认为0;
    studdv:可选,正态分布的标准差,默认为1.0;
    dtype:可选,生成张量的类型,默认为tf.float32;
    seed:可选,随机种子数,是一个整数,当设置之后每次生成的随机数都一样;
  2. tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32,seed=None), 该函数也是产生一个符合正太分布的变量,当随机数偏离平均值超过2个标准差时该数值将会重新分配一个随机数,参数含义和上面一致。
  3. tf.random_uniform(shape, minval=low, maxval=high, dtype=tf.float32), 该函数产生平均分布的变量,其参数含义为:
    shape:必选,生成张量的形状
    minval:必选,产生值的最小值
    maxval:必选,产生值的最大值
    dtype:可选,产生值的类型,默认为float32

使用上述三种函数初始化2行3列变量,随机种子为1

import tensorflow as tf

w1 = tf.Variable(tf.random_normal((2,3), stddev=1, seed=1))
w2 = tf.Variable(tf.truncated_normal(shape=(2,3), stddev=1, mean=0))
w3 = tf.Variable(tf.random_uniform((2,3), minval=1, maxval=2, dtype=tf.float32))
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
 sess.run(init_op)
 print('w1:',sess.run(w1))
 print('w2:',sess.run(w2))
 print('w3:',sess.run(w3))

输出结果为:

w1: [[-0.8113182   1.4845988   0.06532937]
 [-2.4427042   0.0992484   0.5912243 ]]
w2: [[ 0.3278117  -0.95230293  0.70185417]
 [-0.09465726  1.3022106  -0.77556884]]
w3: [[1.3131701 1.3706423 1.5397733]
 [1.4204506 1.5305479 1.9178613]]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值