在 Tensorflow 中确定未知形状的变量等级

2024-01-02

在张量流中创建变量时validate_shape=False,它也忽略变量等级:

x = tf.placeholder(tf.float32, [None, 10])
v = tf.Variable(tf.ones_like(x), trainable=False, validate_shape=False)
tf.layers.dense(v, 10)

ValueError: Input 0 of layer dense_5 is incompatible with the layer: its rank is undefined, but the layer requires a defined rank.

在这种情况下,虽然确切的变量形状必须是动态的,但我知道它的排名是什么。有没有什么方法可以将其告知张量流,以便我可以使用需要知道输入等级的操作?


你可以这样做tf.reshape():

x = tf.placeholder(tf.float32, [None, 10])
v = tf.Variable(tf.ones_like(x), trainable=False, validate_shape=False)
#tf.layers.dense(v, 10)
tf.layers.dense(tf.reshape(v,[-1,10]),10)

哪里的-1允许返回张量具有形状(?,10);即上面的输出是:

<tf.Tensor 'dense_10/BiasAdd:0' shape=(?, 10) dtype=float32>

这就是你想要的。您可以通过使用已知的形状和切换来验证正确的行为validate_shape,如:

x = tf.placeholder(tf.float32, [5, 10])
v = tf.Variable(tf.ones_like(x), trainable=False, validate_shape=True)
tf.layers.dense(v, 10)

...返回结果与:

x = tf.placeholder(tf.float32, [5, 10])
v = tf.Variable(tf.ones_like(x), trainable=False, validate_shape=False)
tf.layers.dense(tf.reshape(v,[5,10]),10)

# returns <tf.Tensor 'dense_8/BiasAdd:0' shape=(5, 10) dtype=float32>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Tensorflow 中确定未知形状的变量等级 的相关文章

随机推荐