tensorflow 在图模式下,tf.shape无法推断稀疏Tensor的形状,

xpcnnkqh  于 4个月前  发布在  其他
关注(0)|答案(4)|浏览(98)

请确保这是一个bug。根据我们的规定,
我们只在GitHub上解决代码/文档bug、性能问题、功能请求和构建/安装问题。标签:bug_template

系统信息

  • 是否编写了自定义代码(与使用TensorFlow提供的库存示例脚本相反):否
  • OS平台和发行版(例如,Linux Ubuntu 16.04):Ubuntu 20.04
  • 移动设备(例如iPhone 8,Pixel 2,三星Galaxy)如果问题发生在移动设备上:N/A
  • 从哪里安装的TensorFlow(源代码或二进制文件):二进制
  • TensorFlow版本(请使用以下命令):2.5.0
  • Python版本:3.8.10
  • Bazel版本(如果从源代码编译):N/A
  • GCC/编译器版本(如果从源代码编译):N/A
  • CUDA/cuDNN版本:N/A
  • GPU型号和内存:N/A

您可以使用我们的环境捕获工具收集一些此信息。您还可以使用以下命令获取TensorFlow版本:

  1. TF 1.0: python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"
  2. TF 2.0: python -c "import tensorflow as tf; print(tf.version.GIT_VERSION, tf.version.VERSION)"
    v2.5.0-rc3-213-ga4dfb8d1a71 2.5.0

描述当前行为

tf.shape无法在图模式下推断稀疏Tensor的形状。

描述预期行为

tf.shape应该能够在图模式下推断稀疏Tensor的形状。

Contributing

  • 您是否想提交PR?(是/否):否
  • 如果提供候选解决方案,请简要描述您的候选解决方案:
    独立代码以重现问题

提供一个最小必要的可复现测试用例,以生成问题。如果可能,请分享一个链接到Colab/Jupyter/任何笔记本。

#!/usr/bin/python3
import tensorflow as tf;

inputs = tf.keras.Input((2,3,4));
print(tf.shape(inputs)); # tf.shape can infer dense tensor

inputs = tf.keras.Input((2,3,4), sparse = True);
print(tf.shape(inputs)); # tf.shape cannot infer sparse tensor

其他信息/日志 包括有助于诊断问题的任何日志或源代码。如果包括回溯,请包括完整的回溯。大型日志和文件应附加。

cgyqldqp

cgyqldqp1#

能够复现Tensorflow 2.10中的问题。请查看gist here,谢谢!

o75abkj4

o75abkj42#

@breadbread1984,
文档中提到tf.shape表示**tf.shapeTensor.shape在急切模式下应该是相同的。使用inputs.shape代替tf.shape(inputs))**可以解决你的问题。请查看工作代码中的the Gist。谢谢!

doinxwow

doinxwow3#

在图形模式下,批量大小是可以推断的,但在使用tensor.shape时则不行。这就是为什么我在使用功能模型定义构建图形模型时,会使用tf.shape来推断Tensor的形状。

yqyhoc1h

yqyhoc1h4#

我猜这可能是Keras的问题。SparseTensor可以正常工作:

x = tf.sparse.SparseTensor(
    [[0, 0, 1]], [2], (2, 3, 4)
)
print(x)
print(tf.shape(x))

相关问题