Итак, мой код был написан в Tensorflow v1 с активным режимом DISABLED. Теперь я, наконец, передал код в TF 2. Я хочу проверить, что код дает тот же результат, поэтому я хочу провести симуляцию МонтеКарло для запуска обеих сетей много раз и сравнить ее значения точности и потерь. Если я сделал код правильно, оба будут иметь одинаковое распределение.
Сначала я сделал код следующим образом:
for iter in iterations:
run_v2_net()
run_v1_net()
v1 не имеет проблем, потому что я просто использую tf.compat.v1.disable_eager_execution()
и tf.compat.v1.reset_default_graph()
и работает как шарм. Однако для v2 не все так просто. Когда я запускаю его, я получаю:
Если я пытаюсь использовать tf.compat.v1.enable_eager_execution()
, я получаю ValueError: tf.enable_eager_execution must be called at program startup.
, потому что:
tf.enable_eager_execution()
предназначен для однократного вызова в программе, как правило, первое, что в программе. Библиотеки не должны вызывать tf.enable_eager_execution()
, а вместо этого должны вообще работать как для построения графа, так и для нетерпеливого выполнения (или утверждают tf.executing_eagerly()
, если они работают только с нетерпеливым выполнением).
Ссылка: tf.enable_eager_execution должен вызываться при запуске программы . Здесь они рекомендуют переустанавливать ядро, но для меня это, конечно, не вариант (если только нет способа переустановить его внутри для l oop, что на самом деле может быть решением).
Конечно, это можно решить, просто запустив 2 сценария, сохранив результат на CSV или чем-то еще, а затем сравните оба CSV. Но мне интересно знать, есть ли на самом деле решение сделать это только одним скриптом.
Наконец, я попытался tf.keras.backend.clear_session()
, но в начале для l oop (или в конце), но это ничего не изменило.