Google colaboratory 在谷歌Colab上为TPU屏蔽R-CNN

Google colaboratory 在谷歌Colab上为TPU屏蔽R-CNN,google-colaboratory,google-cloud-tpu,Google Colaboratory,Google Cloud Tpu,我们正在尝试使用Google Colab TPU构建一个图像分割深度学习模型。我们的模型是R-CNN TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR'] import tensorflow as tf tpu_model = tf.contrib.tpu.keras_to_tpu_model( model.keras_model, strategy=tf.contrib.tpu.TPUDistributionStrategy( tf.co

我们正在尝试使用Google Colab TPU构建一个图像分割深度学习模型。我们的模型是R-CNN

TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']

import tensorflow as tf
tpu_model = tf.contrib.tpu.keras_to_tpu_model(
model.keras_model,
strategy=tf.contrib.tpu.TPUDistributionStrategy(
tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))
然而,我在将我们的Mask R-CNN模型转换为TPU模型时遇到了问题,如下所示

ValueError: 
Layer <keras.engine.topology.InputLayer object at 0x7f58574f1940> has a 
variable shape in a non-batch dimension.  TPU models must
have constant shapes for all operations.

You may have to specify `input_length` for RNN/TimeDistributed layers.

Layer: <keras.engine.topology.InputLayer object at 0x7f58574f1940>
Input shape: (None, None, None, 3)
Output shape: (None, None, None, 3)
ValueError:
图层有一个
非批次维度中的可变形状。TPU模型必须
所有操作都具有恒定的形状。
您可能必须为RNN/TimeDistributed层指定“输入长度”。
图层:
输入形状:(无,无,无,3)
输出形状:(无,无,无,3)

非常感谢您的帮助。

您能分享一下输入数据功能吗。很难说出确切的问题,但表示输入样本的张量的形状似乎不是静态的

谷歌最近发布了。为此,他们在谷歌的TPU github存储库中使用了Mask RCNN的实验模型(下)。通过查看,看起来他们使用固定的输入大小来定义模型,以克服您看到的问题

有关更多说明,请参见下文:

正如@aman2930所指出的,输入张量的形状不是静态的。这将不起作用,因为Tensorflow和XLA必须具有在编译时定义的所有张量形状。在上面的链接中,该网站特别指出:

静态形状

在常规使用期间,TensorFlow试图在图形构造期间确定每个tf.张量的形状。在期间 执行任何未知形状尺寸都是动态确定的,请参见 张量形状,了解更多细节

使用XLA编译Cloud TPUs TensorFlow模型。XLA 使用类似的系统在编译时确定形状。XLA 要求在编译时静态定义所有张量维度 时间所有形状都必须计算为常数,而不是依赖于 外部数据,或变量或随机变量等有状态操作 数字发生器

这一点,在文档的下面,他们提到输入函数是在CPU上运行的,所以不受静态XLA大小的限制。他们指出批量大小是问题所在,而不是图像大小:

静态形状和批量大小

您的应用程序生成的输入管道 输入\u fn在CPU上运行。因此,它基本上不受严格的静态约束 XLA/TPU环境施加的形状要求。那个 要求是从您的输入管道馈送的成批数据 根据标准确定,TPU具有静态形状 TensorFlow形状推断算法。中间张量是自由的 有一个动态的形状。如果形状推断失败,但形状为 已知可以使用tf.set_shape()施加正确的形状


因此,您可以通过重新设置模型,使其具有固定的批量大小或按照他们的建议使用来解决此问题。

Hmm,从您共享的代码片段中进行诊断有点困难。你能分享一个复制该问题的Colab笔记本的链接吗?