gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:12:11 25 4
gpt4 key购买 nike

我的 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()

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

session.run(initialize, feed_dict={init: 0.5})

这给了我以下错误:

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

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

ValueError: Incompatible shapes for broadcasting: (100, 300) and (0,)

如果我在对 tf.random_uniform 的调用中将 init 替换为文字值 0.5,它就可以工作。

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

最佳答案

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

init = tf.placeholder(tf.float32, shape=(), name="init")

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

通过定义具有已知形状的 init(其中标量是 ()[],而不是 0),TensorFlow 可以对 tf.random_uniform() 结果的形状做出正确的推断,并且您的程序应该按预期运行。

关于python - 如何通过 TensorFlow 提要字典传递标量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com