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
是将张量变量初始化为自定义值的唯一方法吗?这迫使一个人在分开的地方进行声明和数据初始化,这很麻烦
答案 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]]))