Не могли бы вы, пожалуйста, помочь с ошибкой вывода формы «tf.vectorize_map»

#python-3.x #tensorflow #tensorflow2.0

Вопрос:

Я пытаюсь перебрать два массива размером 32 пакета, но с вложенными tf.vectorize_maps внутри них, так что по одному для каждого массива, но они имеют разные формы, поэтому: (32,12-1,4) и (32,1024,4), Но я делаю это внутри model.fit/model.train_on_batch внутри trainging_step внутри вложенной tf.функции. И я получаю эту ошибку.

И я получаю эту ошибку:

 tf.vectorized Input to reshape is a tensor with 98304 values, but the requested shape has 288.
 

Попытки исправить или оригинально.

 IoUs = tf.vectorized_map(lambda batch: tf.vectorized_map(lambda ypredValues: 
tfytrue(ytrue[batch],ypredValues),ypred[batch]),tf.range(32)) 

IoUs = tf.vectorized_map(lambda batch: tf.vectorized_map(lambda ypredValues: tfytrue(batch[0],ypredValues),batch[1]),(ytrue,ypred))
 

Это работает, когда индекс пакета одинаков:

 IoUs = tf.vectorized_map(lambda batch: tf.vectorized_map(lambda ypredValues: tfytrue(batch[1],ypredValues),batch[1]),(ytrue,ypred`))
 

Но это глупо, потому что я не могу сопоставить размер пакета и использовать один и тот же массив: возможно, он находится внутри других векторных карт, но если кто-нибудь может помочь, пожалуйста, было бы здорово. И причина, по которой я использую tf.vectorized, заключается в том, что увеличение скорости примерно в 3000 раз по сравнению с map_fn, и я смог использовать numpy, поскольку tf.py_func и tf.numpy_array возвращали недопустимые значения заполнителей.

Но это работает с элементами=(ytrue,ypred), но не в модели.подходит или модель.train_on_batch.

 RegLoss = tfIoU(batch[1],self.RPN(batch[0])[0])
 

Отлично работает, но внутри train_on_batch/модели.вписывайтесь в мой пользовательский train_step tfIoU(ytrue,ypred):

  Input to reshape is a tensor with 393216 values, but the requested shape has 4608
 

Никакого изменения формы не происходит, и оно восходит к пакетной векторизованной карте

Мой вопрос в том, что, поскольку он работает в первый раз, он как бы задает форму для tf.векторизованной карты, то во второй раз он не работает?

итак, (32,12,4) работает, затем (32,8,4) терпит неудачу, затем меняет порядок, и они делают то же самое, может ли кто-нибудь помочь?

Ответ №1:

Это было tf.function() ; это может быть только в последней вложенной функции, потому что она подразумевает формы, независимо от того, является ли она expermital_relax_shapes=True .