Как оптимизировать мой код Tensorflow (итерация на тензоре)?

#python #tensorflow #optimization

Вопрос:

Я написал некоторый код, который повторяет форму моего тензора и добавляет значение тензору на каждом шаге. Проблема в том, что он медленный для большого количества итераций (а мне их нужно много).:

 for i in range(0, num_samples):
    for j in range(0, int(numTimeSteps.numpy())):
        random_num = tf.squeeze(tf.random.normal([1], mean, std_dev, dtype=dtype))
        tensor[i,j].assign(tf.math.add(random_num, estr[i,j]).numpy())
 

На каждой итерации я добавляю случайное число (полученное из нормального распределения) в тензор

  • num_samples задается пользователем и может находиться в диапазоне 1000-100 000
  • numTimeSpes равно 80

Есть ли способ оптимизировать это?

Ответ №1:

TF редко следует полагаться на циклы или numpy. Если вы видите что-либо из этого, попробуйте векторизовать его и работать с собственными операциями tf.

Возможно, что-то вроде

 estr = estr   tf.random.normal(shape=estr.shape)
 

Обратите внимание, что tf.random скоро устареет из — за недостаточной случайности-см. Примечание в документах. Предпочтительным подходом является генератор случайных чисел tf.random..