Google недавно выпустил учебник по запуску Mask R-CNN на своих TPU .Для этого они используют экспериментальную модель для Mask RCNN в github-репозитории Google TPU (в разделе models / экспериментальный / mask_rcnn ).Просматривая код , кажется, что они определяют модель с фиксированным размером ввода для преодоления проблемы, с которой вы сталкиваетесь.
Более подробное объяснение см. Ниже:
Как@ aman2930 указывает, что форма вашего входного тензора не является статичной.Это не будет работать, потому что Tensorflow компилирует модели с XLA для использования TPU , а XLA должен иметь все тензорные формы, определенные во время компиляции.В приведенной выше ссылке веб-сайт специально указывает на это:
Статические фигуры
Во время регулярного использования TensorFlow пытается определить формы каждого tf.Tensor во время построения графика.Во время выполнения любые неизвестные размеры формы определяются динамически, см. Подробности в разделе Тензорные формы.
Для запуска на облачных TPU Модели TensorFlow компилируются с использованием XLA.XLA использует аналогичную систему для определения форм во время компиляции.XLA требует, чтобы все тензорные измерения были статически определены во время компиляции.Все фигуры должны быть постоянными и не зависеть от внешних данных или операций с состоянием, таких как переменные или генератор случайных чисел.
На той стороне, далее по документу, упоминается, что функция вводаработать на процессоре, поэтому не ограничен статическими размерами XLA.Они указывают на размер пакета, а не на размер изображения:
Статические формы и размер пакета
Входной конвейер, сгенерированный вашим input_fn, запускается на CPU.Таким образом, он в основном не содержит строгих статических требований к форме, предъявляемых средой XLA / TPU.Единственное требование состоит в том, чтобы пакеты данных, передаваемые из входного конвейера в TPU, имели статическую форму, как это определено стандартным алгоритмом вывода формы TensorFlow.Промежуточные тензоры свободны, чтобы иметь динамические формы.Если вывод формы не удался, но форма известна, можно наложить правильную форму с помощью tf.set_shape ().
Таким образом, вы можете исправить это, переформулировав свою модель, чтобы иметь фиксированный размер пакета илииспользовать tf.contrib.data.batch_and_drop_remainder , как они предлагают.