首页 > 解决方案 > 将 Tensorflow 2.0 降级到 1.5 后,结果发生了变化,结果再现不可用

问题描述

你能帮我在不重新启动 Python 内核的情况下使用 Tensorflow 1.15 实现可重现的结果吗?为什么 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 topic,我尝试通过在我的代码前面使用来设置 TF 2.0 与 TF 1 的兼容性:

import tensorflow.compat.v1 as tf

但是错误又出现了。根据许多用户的建议,我将 TF2 降级到 TF 1.15 它解决了问题,并且 shap 模块解释了结果,但是:1)为了使结果可重现,现在我必须更改 tf.random.set_random_seed 上的 tf.random.set_seed(7) (7)并且每次都重启Python内核!在 TF2 中,我不必重新启动内核。2)预测结果发生了变化,尤其是经济效率(即TF1.5.错误分类比TF2.0更重要的样本)。

TF 2:精度:94.95%,经济效率=64%

TF 1:精度:94.85%,经济效率=56%

模型的代码在这里

标签: python-3.xtensorflowtensorflow2.0shap

解决方案


首先,结果不仅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 加载失败:找不到指定的模块”。通过安装更新​​的 C++ 包可以 100% 解决。看到这个:https ://github.com/tensorflow/tensorflow/issues/22794#issuecomment-573297027 下载包的链接:https: //support.microsoft.com/ru-ru/help/2977003/the-latest-支持的视觉 C 下载

在 Python 3.7 中,您将找不到带有 whl 扩展的 shap 0.35.0 版本。只有 tar.gz 扩展会给出错误:“安装 Visual C++ 包”。但是安装没有帮助。然后在此处下载适用于 Python 3.7 的 shap 0.35.0:https ://anaconda.org/conda-forge/shap/files 。运行 Anaconda 外壳。类型:conda install -c conda-forge C:\shap-0.35.0-py37h3bbf574_0.tar.bz2。


推荐阅读