При выполнении графа тензорного потока игнорируется условие равенства в режиме более раннего выполнения. - PullRequest
0 голосов
/ 22 октября 2019

Я наткнулся на странное поведение тензорного потока. После повсеместного tf.print это привело меня к причине, как показано в следующем коде, но я не знаю, почему это произошло, если только условие многопоточности или построение графика не пропустили сегмент кода. Не вижу, чтобы это случилось.

# Ragged tensor may have empty rows. So, for tensor arithmetic operation, 
# we need to create zero-padded tensors to replace them.
# This implementation only keeps the first entry of each row.
# So, the output tensor is a normal tensor.
def pad_empty_ragged_tensor(ragtensor):
    tf.print("Ragged tensor padding empty tensor...", output_stream=sys.stdout)
    batch_size = ragtensor.shape[0]
    n_rows = ragtensor.row_lengths()
    tf.print("row_lengths(): ", n_rows, output_stream=sys.stdout)
    new_tensor = []
    for i in range(batch_size):
        tf.print("n_rows[i]: ", n_rows[i], output_stream=sys.stdout)
        if tf.equal(n_rows[i], 0): # Tried n_rows[i] == 0 too
            tf.print("Create zero padded tensor...", output_stream=sys.stdout)
            num_zeros = ragtensor.shape[-1]
            tensor = tf.tile([[0]], [1, num_zeros])
            tensor = tf.cast(tensor, dtype=ragtensor.dtype)
        else:
            tf.print("Take first entry from the row", output_stream=sys.stdout)
            tensor = ragtensor[i,0:1]
        new_tensor.append(tensor)
    tensor = tf.stack(new_tensor, axis=0) # [batch, 1, [y, x, h, w]]
    tensor.set_shape([batch_size, 1, ragtensor.shape[-1]])
    tf.print("The padded tensor shape: ", tensor.shape, output_stream=sys.stdout)
    return tensor

Вот сегмент трассировки печати:

row_lengths():  [1 1 0 ... 1 1 1]
n_rows[i]:  1
Take first entry from the row
n_rows[i]:  1
Take first entry from the row
n_rows[i]:  0
Take first entry from the row
n_rows[i]:  1
Take first entry from the row

Как показано, блок условий if tf.equal(n_rows[i], 0): # Tried n_rows[i] == 0 too никогда не вызывался. Каждый раз он попадает в условие «еще», даже если условие равенства выполнено. Кто-нибудь может намекнуть мне, что пошло не так? Кстати, отладка тензорного потока также сложна. Точка останова в VSCode не была достигнута после выполнения графика. tfdbg также не работает с нетерпеливым исполнением. Предложение по этому вопросу также очень полезно для меня.

Мой dev env:

  • ОС: Ubuntu18.04
  • Python: 3.6
  • Tensorflow-GPU: 1,14
  • GPU: RTX2070
  • Cuda: 10,1
  • Cudnn: 7,6
  • IDE: VS код
  • Режим Tensorflow: Стремительное исполнение

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...