#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
.