与 Keras、TensorFlow 和 scikit (tf.global_variables()) 可能存在的兼容性问题

Posted

技术标签:

【中文标题】与 Keras、TensorFlow 和 scikit (tf.global_variables()) 可能存在的兼容性问题【英文标题】:Possible compatibility issue with Keras, TensorFlow and scikit (tf.global_variables()) 【发布时间】:2017-08-20 15:43:26 【问题描述】:

我正在尝试在 Keras Regressor(使用 TensorFlow)上对我的数据集进行一个小测试,但我遇到了一个小问题。错误似乎出在 scikit 的函数 cross_val_score 上。它从它开始,最后一条错误消息是:

File "/usr/local/lib/python2.7/dist-packages/Keras-2.0.2-py2.7.egg/keras/backend/tensorflow_backend.py", line 298, in _initialize_variables
variables = tf.global_variables()
AttributeError: 'module' object has no attribute 'global_variables'

我的完整代码基本上是在http://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/ 中找到的示例,只是做了一些小改动。 我查看了“'module' object has no attribute 'global_variables'”错误,它似乎与 Tensorflow 版本有关,但我使用的是最新版本(1.0)并且代码中没有函数直接与我可以改变的 tf 一起工作。以下是我的完整代码,无论如何我可以更改它以使其正常工作吗?感谢您的帮助

import numpy
import pandas
import sys

from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.datasets import load_svmlight_file


# define base mode
def baseline_model():
        # create model
        model = Sequential()
        model.add(Dense(68, activation="relu", kernel_initializer="normal", input_dim=68))
        model.add(Dense(1, kernel_initializer="normal"))
        # Compile model
        model.compile(loss='mean_squared_error', optimizer='adam')
        return model

X, y, query_id = load_svmlight_file(str(sys.argv[1]), query_id=True)
scaler = StandardScaler()
X = scaler.fit_transform(X.toarray())

# fix random seed for reproducibility
seed = 1
numpy.random.seed(seed)
# evaluate model with standardized dataset
estimator = KerasRegressor(build_fn=baseline_model, nb_epoch=100, batch_size=5, verbose=0)

kfold = KFold(n_splits=5, random_state=seed)
results = cross_val_score(estimator, X, y, cv=kfold)
print("Results: %.2f (%.2f) MSE" % (results.mean(), results.std()))

【问题讨论】:

我遇到了同样的问题。但最终修复它。我告诉你我做了什么:我在 conda 环境中安装了 tensorflow,就像这里 tensorflow.org/install/install_linux#InstallingAnaconda 一样,我还在 conda 环境中安装了 Keras。然后您需要所有依赖项(numpy 等),重要的是您拥有所有这些依赖项的最新版本。它终于对我有用。希望对您有所帮助。 【参考方案1】:

您可能使用的是较旧的 Tensorflow 版本安装 tensorflow 1.2.0rc2,应该没问题。

【讨论】:

是的,我以为它已更新,但事实并非如此。感谢您的帮助!

以上是关于与 Keras、TensorFlow 和 scikit (tf.global_variables()) 可能存在的兼容性问题的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow与对应的keras版本

keras 与 tensorflow.python.keras - 使用哪一个?

keras与tensorflow.python.keras - 使用哪一个?

将 Keras 和 Tensorflow 与 AMD GPU 结合使用

TensorFlow 和 Keras 中的符号张量是啥?

使用 GPU 而不是 CPU 与 Keras 和 Linux 的 Tensorflow 后端