#python #tensorflow #keras #eager-execution
#python #тензорный поток #keras #нетерпеливое выполнение
Вопрос:
Я новичок в Python и tensorflow. Я немного (или сильно) озадачен: tf.random.normal(), похоже, работает не так, как ожидалось.
tf.random.normal() используется для генерации некоторых данных. Я хочу видеть, что данные генерируются так, как ожидалось, путем их печати на экране через «tf.keras.backend.eval ()».
randndata = tf.random.normal([1, 5])
print('randndata = ', tf.keras.backend.eval(randndata))
Пока все кажется нормальным. Однако это дает совершенно другой результат, если данные печатаются во второй раз.
randndata = tf.random.normal([1, 5])
print('randndata = ', tf.keras.backend.eval(randndata))
print('randndata = ', tf.keras.backend.eval(randndata))
Проблема не только в обычном распределении. Равномерное распределение имеет ту же проблему.
Версия tensorflow 2.1.0.
Спасибо!
Комментарии:
1. Я только что протестировал его с помощью TF2.3.0 и обнаружил, что он печатает одни и те же числа дважды. Попробуйте обновить свой TF.
2. Большое вам спасибо за вашу помощь. Я попытаюсь обновить Tensorflow.
3. только что протестировал 2.1 и 2.3 в Colab — оба выдают одну и ту же строку дважды. Может быть что-то еще.
4. Пожалуйста, предоставьте минимальный, воспроизводимый пример, демонстрирующий это поведение. Он должен быть полным, то есть пользователи могут копировать, вставлять и запускать его, ничего не меняя.
5. Это звучит как разница между режимами eager и graph, это не ошибка или что-то в этом роде.
Ответ №1:
Гарри, я смог воспроизвести твою ошибку, отключив быстрое выполнение. В этом случае tf.random.normal
вызывается при каждом запуске eval
. При активном выполнении случайные числа присваиваются переменной немедленно, а затем они просто передаются tf.keras.backend.eval()
вызовам.
Найдите, где вы могли отключить быстрое выполнение — это объяснит загадочную ситуацию. Разместите здесь больше кода, если сомневаетесь.
Я предлагаю использовать стиль TF2 с быстрым выполнением и eval
вообще не вызывать (или вызывать его один раз, если у вас есть какой-то сложный график вычислений). подробнее о быстром выполнении читайте здесь
Комментарии:
1. @ Ruslan Большое вам спасибо! Я пытался обновить версию Tensorflow. Однако версия 2.3.0, похоже, недоступна через Conda. Кроме того, Руслан С. также прокомментировал, что с версией 2.1.0 проблем нет.
2. В чем причина в вашем случае? помогло ли это? если да — пожалуйста, примите.
3. вы совершенно правы. Это вызвано отключением быстрого выполнения. Я прочитаю больше о быстром выполнении по вашей ссылке. Большое спасибо!