TensorFlow变量初始化大坑和小技巧

在TensorFlow中,变量初始化是个关键步骤,尤其是权重变量通常使用随机函数赋值以避免拟合陷阱。若不执行初始化,运行时可能会出错。常见的初始化方法包括使用`tf.global_variables_initializer()`。此函数简化了大量变量初始化的复杂性,但要注意变量的依赖关系,例如当一个变量依赖于另一个已初始化的变量时,必须确保正确执行初始化顺序。尽管有人认为显式初始化显得多余,但这种设计强调了每个步骤的重要性,体现了TensorFlow的设计哲学。
摘要由CSDN通过智能技术生成

在TensorFlow的整个设计框架中,会话Session之前的图结构设计中,除了constant型是做了默认的初始化定义,其他的变量声明以及占位符都是一种数据初始化方法的描绘。

当然占位符是预告在运行过程中得到各种导入的数据(如输入数据、文件导入等),那么对于常常用来进行权重迭代的变量,在初始化的时候一般会以某种随机函数被赋以随机值(避免进行拟合陷阱),这样的变量赋值都是一个描绘,需要在会话中进行真实执行,也就是在session中,要对变量进行初始化操作,否则会出现无法执行或者执行出错的情况。

常用的初始化方法有:

weight = tf.Variable(tf.random_normal([2,3],stddev=1.0,seed=1))

sess = tf.Session()
sess.run(weight.initializer)

但是也要注意当变量很多的时候,一个个进行变量的初始化非常消耗精力,而且有时候的变量依赖关系【一会儿讲到】会成为大问题,所以也常常用一个简单的函数来进行操作,整个函数其实对于变量进行了统筹管理,方便我们码农专注在更有价值的部分:

sess = tf.Session()
init_op = tf.initialize_all_variables()
sess.run(init_op)

是了一个tf.initialzie_all_variables(),【该函数在2017年3月后被升级为了:global_variables_initializer()】类似一个变量管理器的启动函数,一定在sess中

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow 中,可以使用不同的方法来初始化变量。以下是一些常用的变量初始化方法: 1. 随机初始化: - `tf.random_normal_initializer(mean, stddev)`: 从正态分布中随机采样初始化变量。 - `tf.truncated_normal_initializer(mean, stddev)`: 从截断的正态分布中随机采样初始化变量,截断是指只保留一定范围内的值。 - `tf.random_uniform_initializer(minval, maxval)`: 从均匀分布中随机采样初始化变量。 2. 固定值初始化: - `tf.constant_initializer(value)`: 使用给定的常数值初始化变量。 3. 预训练模型初始化: - `tf.keras.initializers.GlorotUniform()`: 根据 Glorot 初始化方法初始化变量,称为 Xavier 初始化。 - `tf.keras.initializers.HeUniform()`: 根据 He 初始化方法初始化变量。 4. 自定义初始化: - `tf.keras.initializers.VarianceScaling(scale, mode, distribution)`: 根据指定的缩放因子、模式和分布进行自定义初始化。 在使用这些方法初始化变量时,可以将其作为参数传递给 `tf.get_variable()` 或者作为初始化参数传递给 `tf.Variable()`。示例如下: ```python import tensorflow as tf # 随机初始化 random_normal_init = tf.random_normal_initializer(mean=0.0, stddev=0.1) x = tf.get_variable('x', shape=(2, 3), initializer=random_normal_init) # 固定值初始化 constant_init = tf.constant_initializer(2.0) y = tf.get_variable('y', shape=(3, 4), initializer=constant_init) # 预训练模型初始化 glorot_uniform_init = tf.keras.initializers.GlorotUniform() z = tf.get_variable('z', shape=(4, 5), initializer=glorot_uniform_init) # 自定义初始化 custom_init = tf.keras.initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='truncated_normal') w = tf.get_variable('w', shape=(5, 6), initializer=custom_init) # 初始化所有变量 init_op = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init_op) # 打印变量的值 print(sess.run(x)) print(sess.run(y)) print(sess.run(z)) print(sess.run(w)) ``` 在上述示例中,我们使用不同的初始化方法初始化了四个变量 `x`、`y`、`z` 和 `w`,然后使用 `tf.Session()` 运行初始化操作,并打印变量的值。 这些是 TensorFlow 中常用的变量初始化方法,你可以根据自己的需要选择合适的方法来初始化变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值