Tensorflow variable_scope 中的 partitioner 参数是做啥用的?

Posted

技术标签:

【中文标题】Tensorflow variable_scope 中的 partitioner 参数是做啥用的?【英文标题】:What is partitioner parameter in Tensorflow variable_scope used for?Tensorflow variable_scope 中的 partitioner 参数是做什么用的? 【发布时间】:2018-04-20 14:51:31 【问题描述】:

tf.variable_scope 有一个partitioner 参数,如documentation 中所述。

据我了解,它用于分布式训练。谁能更详细地解释一下它的正确用法是什么?

【问题讨论】:

【参考方案1】:

巨大的张量流变量可以在多台机器上分片(参见this discussion)。 Partitioner 是一种机制,通过它 tensorflow 分配和组合回张量,因此程序的其余部分不知道这些实现细节并以通常的方式使用张量。

您可以通过tf.get_variable为每个变量指定分区器:

如果提供了分区器,则返回 PartitionedVariable。将此对象作为张量访问会返回沿分区轴连接的分片。

或者您通过tf.variable_scope 为整个作用域定义默认分区器,这将影响其中定义的所有变量。

在this page 上查看 tensorflow 1.3 中可用分区器的列表。最简单的是tf.fixed_size_partitioner,它沿着指定的轴对张量进行分片。这是一个示例用法(来自this question):

w = tf.get_variable("weights",                                        
                    weights_shape,                                    
                    partitioner=tf.fixed_size_partitioner(num_shards, axis=0), 
                    initializer=tf.truncated_normal_initializer(stddev=0.1))

【讨论】:

以上是关于Tensorflow variable_scope 中的 partitioner 参数是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow variable_scope 中的 partitioner 参数是做啥用的?

tensorflow中使用tf.variable_scope和tf.get_variable的ValueError

TensorFlow进阶---名称域和共享变量

TensorFlow 变量作用域 变量管理 共享变量

tf.Variabletf.get_variabletf.variable_scope以及tf.name_scope关系

TensorFlow的模型保存与加载