gpt4 book ai didi

tensorflow - tf.get_variable 不接受张量的形状

转载 作者:行者123 更新时间:2023-12-03 17:38:11 24 4
gpt4 key购买 nike

看来 tf.get_variable不接受 Tensor仅用于形状 int .这与 tf.Variable 不同。可以接受Tensors .这是否正确,如果正确,是否有解决方法来获取 tf.get_variable当形状为 Tensor 时工作?我不想跑session在图构建的这个阶段,因为它会使下游的许多事情复杂化。

我正在尝试将 cuDNN 绑定(bind)用于 RNN,这涉及调用 params_size()在使用 CudnnLSTM 创建的模型上.这将返回要保存在参数缓冲区中的参数数量作为 Tensor ,然后用于创建保存参数的变量。而不是使用 tf.Variable ,有所有的警告,我想使用 tf.get_variable保存参数值,以便我可以使用与 tf.get_variable 兼容的所有各种初始化程序轻松初始化它们等等。所有的新机器都是围绕tf.get_variable build 的。 ,因此不得不回到低级 tf.Variable很麻烦。 tf.get_variable 的限制似乎很奇怪不接受Tensorstf.Variable做。

最佳答案

解决方法是提供一个具有形状但动态的初始化器。例如,而不是

s = tf.placeholder(tf.int32, shape=())
init = tf.random_normal_initializer()
tf.get_variable('foo', shape=(s,), initializer=init) # error, shape cannot be a Tensor

你会用
s = tf.placeholder(tf.int32, shape=())
init = tf.random_normal((s,))
tf.get_variable('foo', initializer=init, validate_shape=False)

但是请注意,变量的初始化现在很棘手。调用 tf.global_variables_initializer()将尝试初始化 'foo' ,因此您需要确保它可以被初始化(如果需要,提供一些值)或自己处理初始化。

另一种解决方法是将变量初始化为任何值(例如零标量),然后 tf.assign当形状已知时,具有所需形状的值。在初始化过程中使用起来更容易一些,因为初始值在 fir assign 之后被丢弃。 ,所以它可能是一个不错的选择。

关于tensorflow - tf.get_variable 不接受张量的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43482089/

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