如何通过TensorFlow提要字典传递标量

W.P*_*ill 15 python machine-learning tensorflow

我的TensorFlow模型用于tf.random_uniform初始化变量.我想在开始训练时指定范围,因此我为初始化值创建了一个占位符.

init = tf.placeholder(tf.float32, name="init")
v = tf.Variable(tf.random_uniform((100, 300), -init, init), dtype=tf.float32)
initialize = tf.initialize_all_variables()
Run Code Online (Sandbox Code Playgroud)

我在训练开始时初始化变量就像这样.

session.run(initialize, feed_dict={init: 0.5})
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

ValueError: initial_value must have a shape specified: Tensor("Embedding/random_uniform:0", dtype=float32)
Run Code Online (Sandbox Code Playgroud)

我无法找出shape要传递给的正确参数tf.placeholder.我想我应该做一个标量,init = tf.placeholder(tf.float32, shape=0, name="init")但这会产生以下错误:

ValueError: Incompatible shapes for broadcasting: (100, 300) and (0,)
Run Code Online (Sandbox Code Playgroud)

如果我更换init与文字值0.5在调用tf.random_uniform它的工作原理.

如何通过提要字典传递此标量初始值?

mrr*_*rry 31

TL; DR:init使用标量形状定义如下:

init = tf.placeholder(tf.float32, shape=(), name="init")
Run Code Online (Sandbox Code Playgroud)

这看起来像一个不幸的实现细节tf.random_uniform():它目前使用tf.add()和tf.multiply()重新调整从[-1,+ 1]到[ minval,maxval] 的随机值,但如果形状minval或maxval未知,tf.add()并且tf.multiply()无法推断出正确的形状,因为可能涉及广播.

通过init使用已知形状(标量是()或[]不是0)来定义,TensorFlow可以对结果的形状进行适当的推断tf.random_uniform(),并且您的程序应该按预期工作.

  • 七个星期一个星期,这是我的全职工作 - 其他几个星期我都是为了好玩!:-) (4认同)
  • 你和尤金布雷沃多能否回答这些问题你的全职工作?:-) (3认同)