У меня проблема с изменением измерения объекта TensorShape во время выполнения графа: во-первых, позвольте мне объяснить вам, в чем именно заключается проблема:
предположим, что у нас есть входные данные, и мы хотим, чтобы условие проверяет второе измерение формы нашего тензора и, если этот mod 2 (% 2) не равен нулю, просто добавьте единицу к измерению при выполнении графа, вне выполнения графа с полностью известной формой Я могу сделать:
import tensorflow as tf
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import ZeroPadding2D, Input
inputs = Input((7, 8, 3))
max1 = MaxPooling2D((2,2))(inputs)
if inputs.shape[1] % 2 !=0:
max1 = tensorflow.keras.layers.ZeroPadding2D(((1, 0), (0, 0)))(max1)
print('Check! Zero padded one',max1)
else :
print('No Zero padding needed')
this would give me :
> Check! Zero padded one Tensor("zero_padding2d_46/Pad:0", shape=(?, 4,
> 4, 3), dtype=float32)
and for inputs = Input((8, 8, 3)) I get:
> No Zero padding needed
обратите внимание, что в первом случае с входами = ((7,8,3)) выход слоя максимального пула без условия if будет: (3 , 4,3) поэтому мы знаем, что условие if работает. Однако, если размер формы нашего ввода включает Нет , мы сталкиваемся с проблемами и, более того, это просто не работает во время выполнения графика.
Итак, как я могу применить те же логи c, описанные выше, во время выполнения графа со входом, который включает None в своем измерении (во время определения графа), и все еще оценивать, проверять и применять условия и даже изменить размер по мере необходимости во время выполнения графика ??
тензор потока. версия == 1,9