После понижения версии Tensorflow 2.0 до 1.5 результаты изменились, и воспроизведение результатов недоступно
Не могли бы вы помочь мне добиться воспроизводимых результатов с помощью Tensorflow 1.15 без перезапуска ядра Python. И почему выходные результаты в TF 2.0 и TF 1.5 разные при абсолютно идентичных параметрах и наборе данных? Можно ли добиться идентичного результата?
Подробнее: Я пытался интерпретировать результаты модели в TF 2.0 следующим образом:
import shap
background = df3.iloc[np.random.choice(df3.shape[0], 100, replace=False)]
explainer = shap.DeepExplainer(model, background)
Я получил ошибку:
`get_session` is not available when using TensorFlow 2.0.`get_session` is not available when using TensorFlow 2.0.
Согласно теме SO, я попытался настроить совместимость TF 2.0 с TF 1, используя перед моим кодом:
import tensorflow.compat.v1 as tf
Но ошибка появилась снова. Следуя совету многих пользователей, я понизил TF2 до TF 1.15, это решило проблему, и модуль shap интерпретирует результаты, но: 1) чтобы сделать результаты воспроизводимыми, теперь мне нужно изменить tf.random.set_seed(7) на tf.random.set_random_seed(7) и каждый раз перезапускать ядро Python! В TF2 перезапускать ядро не пришлось. 2) изменены результаты прогноза, в частности, экономическая эффективность (то есть TF1.5. Ошибочно классифицирует более важные образцы, чем TF2.0).
TF 2: точность: 94,95%, экономическая эффективность = 64%
TF 1: точность: 94,85%, экономическая эффективность = 56%
Код модели здесь
1 ответ
Во-первых, результаты отличаются друг от друга не только в версиях TF1 и TF2, но и в версиях TF2.0 и TF2.2. Наверное, это зависит от разных внутренних параметров в упаковках.
Во-вторых, TensorFlow2 работает с DeepExplainer в следующих версиях:
import tensorflow
import pandas as pd
import keras
import xgboost
import numpy
import shap
print(tensorflow.__version__)
print(pd.__version__)
print(keras.__version__)
print(xgboost.__version__)
print(numpy.__version__)
print(shap.__version__)
выход:
2.2.0
0.24.2
2.3.1
0.90
1.17.5
0.35.0
Но вы столкнетесь с некоторыми трудностями при обновлении библиотек.
В Python 3.5 при запуске TF2.2 вы столкнетесь с ошибкой "Ошибка загрузки DLL: указанный модуль не найден". Это на 100% можно решить, установив более новый пакет C++. Смотрите это:https://github.com/tensorflow/tensorflow/issues/22794 Ссылка для загрузки пакета:https://support.microsoft.com/ru-ru/help/2977003/the-latest-supported-visual-c-downloads
В Python 3.7 вы не найдете версию shap 0.35.0 с расширением whl. Только расширение tar.gz, которое выдает ошибку: "Установить пакет Visual C++". Но установка не помогает. Затем скачайте shap 0.35.0 для Python 3.7 здесь: https://anaconda.org/conda-forge/shap/files. Запустите оболочку Anaconda. Введите: conda install -c conda-forge C:\shap-0.35.0-py37h3bbf574_0.tar.bz2.