我应该自己初始化变量还是只用 global_variable_initialize() 初始化?



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

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

对于 tensorflow 用户,你更喜欢自己初始化变量(比如使用 tf.可变(?只调用 global_variable_initialize(( 有什么问题或缺点吗?

希望知道大家的意见,谢谢!

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

tf 的用法。图形键

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

根据我的经验,除了默认为局部变量的tf.metrics.*包创建的变量外,大多数内容都是全局变量(因此您可以使用局部变量初始值设定项重置指标(。

我也不喜欢使用global_variable_initialize。 事实上,变量可以使用TF-SLIM有效而简洁地定义。
我引用的是TensorFlow-Slim文档。

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

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

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')

相关内容

  • 没有找到相关文章

最新更新