Tensorflow 我应该自己初始化变量还是只通过全局变量初始化()?

Tensorflow 我应该自己初始化变量还是只通过全局变量初始化()?,tensorflow,initialization,global-variables,Tensorflow,Initialization,Global Variables,我正在做一项时间序列预测工作,在tensorflow中使用RNNCell时,它不像我自己编写初始化变量,而是经常使用函数global_variable_initialize()来完成这项工作 仅仅调用一个函数并为我初始化所有变量感觉很奇怪。我听说global_variable_initialize()检索包含:[所有权重、所有偏差、所有隐藏状态]的变量列表,但这就像一个不知道变量范围的黑盒子,我自己编写网络时不使用偏差 对于tensorflow用户,您喜欢自己初始化变量吗(例如使用tf.vari

我正在做一项时间序列预测工作,在tensorflow中使用RNNCell时,它不像我自己编写初始化变量,而是经常使用函数global_variable_initialize()来完成这项工作

仅仅调用一个函数并为我初始化所有变量感觉很奇怪。我听说global_variable_initialize()检索包含:[所有权重、所有偏差、所有隐藏状态]的变量列表,但这就像一个不知道变量范围的黑盒子,我自己编写网络时不使用偏差

对于tensorflow用户,您喜欢自己初始化变量吗(例如使用tf.variable)?只调用全局变量初始化()有什么问题或缺点吗


希望能了解大家的意见,谢谢

全局变量初始值设定项不是一个黑匣子,它使用的是
GraphKeys
集合,如下所述:

按照惯例,tensorflow中的大多数操作将变量添加到适当的集合中。优化器使用这些相同的集合来决定哪些变量是可训练的,哪些不是默认的。查看合适的集合


根据我的经验,除了由
tf.metrics.*
程序包创建的变量外,大多数东西都是全局变量,该程序包默认为局部变量(因此可以使用局部变量初始值设定项重置度量)。

我也不喜欢使用全局变量\u initialize。 事实上,使用TF-SLIM可以高效简洁地定义变量。
我引用的是TensorFlow Slim的话

在原生tensorflow中创建变量需要预定义的值或初始化机制(例如,从高斯分布中随机采样)。此外,如果需要在特定设备(如GPU)上创建变量,则必须明确规范。为了减少创建变量所需的代码,TF Slim在variables.py中提供了一组瘦包装函数,允许调用方轻松定义变量

例如,要创建权重变量,使用截断正态分布对其进行初始化,使用l2_损失对其进行正则化,并将其放置在CPU上,只需声明以下内容:


那么,如果我用tf.variable()初始化变量,它是否应该自动添加到变量的集合中?那么,当我调用全局变量时,我定义的变量是否会再次初始化?初始化不会将其添加到集合中。默认情况下,使用
tf.Variable()
创建的变量将添加到可训练的_变量和全局_变量中,除非您在创建时设置了
TRAINABLE=false
。否则,您必须手动设置它们添加到哪些集合(除非您有特定的原因,否则通常不会这样做)。谢谢您的回复!如果我用这个slim方法初始化变量,它应该自动添加到变量集合中吗?那么,当我调用global_variable_initialize()时,我定义的变量会被再次初始化吗?对于第一个问题,我的答案是肯定的,变量将被添加到GraphKeys集合中。当然,对于第二个问题,变量将再次初始化。请注意,如果使用slim库,则无需使用全局变量初始化。
weights = slim.variable('weights', shape=[10, 10, 3 , 3],  
                        initializer=tf.truncated_normal_initializer(stddev=0.1),   
                        regularizer=slim.l2_regularizer(0.05), device='/CPU:0')