微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当维度未知时如何创建一维范围张量?

如何解决当维度未知时如何创建一维范围张量?

我有一个 n 维数组。我需要根据维度创建一维范围张量。

举个例子:

x = tf.placeholder(tf.float32,shape=[None,4]) 
  
r = tf.range(start=0,limit=,delta=x.shape[0],dtype=tf.int32,name='range')

sess = tf.Session()

result = sess.run(r,Feed_dict={x: raw_lidar})
print(r)

问题是,x.shape[0] 在构建计算图时没有。所以我无法使用范围构建张量。它给出了一个错误

ValueError: Cannot convert an unkNown Dimension to a Tensor: ?

对问题的任何建议或帮助。

提前致谢

解决方法

在图形模式下运行此代码时,

x.shape[0] 可能尚不存在。如果你想要一个值,你需要使用 tf.shape(x)[0]

有关 documentation for tf.Tensor.get_shape 中该行为的更多信息。摘录(重点是我的):

tf.Tensor.get_shape() 等价于 tf.Tensor.shape。

在 tf.function 中执行或使用 tf.keras.Input 构建模型时,Tensor.shape 可能会返回部分形状(对于未知尺寸包括 None)。请参阅 tf.TensorShape 了解更多信息详情。

>>> inputs = tf.keras.Input(shape = [10])
>>> # Unknown batch size
>>> print(inputs.shape)
(None,10)

使用为每个 tf.Operation 注册的形状推断函数计算形状。 返回的 tf.TensorShape 在构建时确定,不执行底层内核。它不是 tf.Tensor。 如果您需要形状张量,请将 tf.TensorShape 转换为 tf.constant,或使用 tf.shape(tensor) 函数,该函数在执行时返回张量的形状。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。