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(),并且您的程序应该按预期工作.
| 归档时间: |
|
| 查看次数: |
16960 次 |
| 最近记录: |