为什么`tf.constant_initializer`没有采用恒定张量?

时间:2016-08-06 14:57:05

标签: python-2.7 tensorflow

Tensorflow has decided to make a constant_initializer op that takes only scalar values对我来说似乎很愚蠢。能够使用常量张量初始化变量会很有意义:

tf.get_variable('some_var', shape = [4,3], initializer=tf.constant_initializer(tf.constant([[0,0,0], [0,0,1],[0,1,0],[1,0,0]])))

使用占位符和feed_dict是将张量变量初始化为自定义值的唯一方法吗?这迫使一个人在分开的地方进行声明和数据初始化,这很麻烦

2 个答案:

答案 0 :(得分:5)

tf.constant_initializer()函数可能不接受tf.Tensor作为参数,但tf.get_variable() 接受tf.Tensor作为其initializer参数。这意味着你可以写:

v = tf.get_variable('some_var', initializer=tf.constant([[0, 0, 0],
                                                         [0, 0, 1],
                                                         [0, 1, 0],
                                                         [1, 0, 0]]))

......这需要更少的角色!

tf.constant_initializer()没有采用任意张量的原因是它被设计为使用每个元素的相同常量值初始化许多不同形状的变量。例如,声明如下:

v = tf.get_variable('some_var', shape=[15, 37], initializer=tf.constant_initializer(
    tf.constant([[0, 0, 0],
                 [0, 0, 1],
                 [0, 1, 0],
                 [1, 0, 0]])))

......没有多大意义。可以说我们可以让tf.constant_initializer()接受一个标量tf.Tensor,然后它会有类似于tf.fill()的语义,但我们还没有任何要求。如果它有用,请随意提出GitHub issue

答案 1 :(得分:1)

删除“ tf.constant”,如下所示,在TF 1.13中工作

tf.get_variable('some_var', shape = [4,3], initializer=tf.constant_initializer(([[0,0,0], [0,0,1],[0,1,0],[1,0,0]]))