【问题标题】:How to make Keras use Tensorflow backend in Anaconda?如何让 Keras 在 Anaconda 中使用 Tensorflow 后端?
【发布时间】:2017-09-05 18:01:14
【问题描述】:

我已经在我的 Anaconda 环境中安装了 tensorflow-gpu。他们都运作良好。

现在我正在尝试使用 Tensorflow 后端安装 Keras。根据instruction 我刚刚运行:

pip install keras

但是它没有安装keras,那我试了一下:

conda install -c conda-forge keras=2.0.2

然后我现在可以在 python 中导入 keras。但问题是,它总是使用 Theano 后端。我正在尝试改变这一点,但不知道该怎么做。

我也尝试编辑文件 ~/.keras,但实际上默认后端已经是 tensorflow。

请帮忙.. 非常感谢!

【问题讨论】:

    标签: python tensorflow anaconda backend keras


    【解决方案1】:

    这是因为 keras conda-forge 包在${CONDA_PREFIX}/etc/conda/activate.d/keras_activate.sh 中放置了一个文件,该文件设置了环境变量KERAS_BACKEND

    (root) [root@starlabs ~]# cat $CONDA_PREFIX/etc/conda/activate.d/keras_activate.sh
    #!/bin/bash
    if [ "$(uname)" == "Darwin" ]
    then
        # for Mac OSX
        export KERAS_BACKEND=tensorflow
    elif [ "$(uname)" == "Linux" ]
    then
        # for Linux
        export KERAS_BACKEND=theano
    fi
    

    从文件中可以看出,在 Linux 中,它将值设置为 'theano' 并根据官方文档:

    环境变量 KERAS_BACKEND 将覆盖 在你的配置文件中定义

    要解决此问题,您可以编辑此文件并将“theano”更改为“tensorflow”(在重新安装或更改环境时可能会被覆盖),或者执行以下操作:

    export KERAS_BACKEND=tensorflow
    python /path/to/python/program.py
    

    【讨论】:

    • 嗨@nehal,谢谢!你说的解决方法是有效的。但我试图找到 keras_activate.sh。但是,${CONDA_PREFIX}/etc/ 中没有 conda/。这是我的 ls:dbus-1/ fish/ fonts/ jupyter/ rc.d/
    • @TaiChristian 搜索 keras_activate.sh 。 find $CONDA_PREFIX | grep keras_activate.sh
    • 请注意,这也适用于 Windows,但您的命令是“echo %CONDA_PREFIX%”和“set KERAS_BACKEND=tensorflow”。
    • os.environ['KERAS_BACKEND'] = 'tensorflow'(在导入 keras 之前)也可以吗?
    • @BallpointBen 可能,但您必须在导入 keras 之前这样做
    【解决方案2】:

    从 conda-forge 安装 keras 后遇到同样的问题。 keras.json 已经有张量流:

    {
        "floatx": "float32",
        "epsilon": 1e-07,
        "backend": "tensorflow",
        "image_data_format": "channels_last"
    }
    

    但是activate tensorflow_keras(其中“tensorflow_keras”是环境名称),将后端更改为theano:

    C:\Users\User1>activate tensorflow_keras
    
    (tensorflow_keras) C:\Program Files\Anaconda3\envs\tensorflow_keras\etc\conda\ac
    tivate.d>set "KERAS_BACKEND=theano"
    

    按照上面的@FvD,我编辑了这个文件:

    C:\Program Files\Anaconda3\envs\tensorflow_keras\etc\conda\activate.d
    

    并将 theano 更改为 tensorflow:

    set "KERAS_BACKEND=tensorflow"
    

    【讨论】:

    • 谢谢!可能是使用 Windows 的人的答案:3
    【解决方案3】:

    在 Windows 10 上进行多用户安装时,Anaconda 环境激活文件为:

    C:\Users\<user name>\AppData\Local\Continuum\Anaconda3\envs\<environment name>\etc\conda\activate.d\keras_activate.bat
    

    只需更改 &lt;user name&gt;&lt;environment name&gt; 以匹配。

    【讨论】:

      【解决方案4】:

      遇到了类似的问题,好像~/.keras/keras.json不可访问,keras正在使用/tmp/.keras/keras.json

      【讨论】:

        【解决方案5】:

        适用于使用 Anaconda 的 Windows 用户。打开 Anaconda 提示并输入:

        set "KERAS_BACKEND=tensorflow"
        

        这应该可以解决问题。 如果使用 Jupyter Notebook,则需要重新启动它。

        【讨论】:

          【解决方案6】:

          虽然这似乎有点工作,但如果你像我一样使用 conda envs,我有分别用于 Tensorflow 和 Theano 的环境。每次激活都会减少很多重复设置和取消设置环境变量的次数。

          https://conda.io/docs/user-guide/tasks/manage-environments.html

          根据 conda envs 页面。

          1)在终端窗口中找到conda环境的目录,例如

          /home/jsmith/anaconda3/envs/analytics.
          

          2)进入该目录并创建这些子目录和文件:

          cd /home/jsmith/anaconda3/envs/analytics
          mkdir -p ./etc/conda/activate.d
          mkdir -p ./etc/conda/deactivate.d
          touch ./etc/conda/activate.d/env_vars.sh
          touch ./etc/conda/deactivate.d/env_vars.sh
          

          3) 编辑 ./etc/conda/activate.d/env_vars.sh 如下:

          echo 'export KERAS_BACKEND=theano' > ./etc/conda/activate.d/env_vars.sh
          

          4) 编辑 ./etc/conda/deactivate.d/env_vars.sh 如下:

          echo 'unset KERAS_BACKEND' > ./etc/conda/deactivate.d/env_vars.sh
          

          【讨论】:

            【解决方案7】:

            在Mac系统中,进入终端并导航到用户配置文件并检查.keras文件夹是否存在。

            ls -a
            cd .keras
            vim keras.json # edit the keras.json file in editor and change the backend to tensorflow
            

            应该是这个样子。

            "floatx": "float32",
            "epsilon": 1e-07,
            "backend": "tensorflow",
            "image_data_format": "channels_last" 
            

            escape按钮关闭编辑器,然后按:wq 它应该工作

            现在,如果您使用任何 conda 环境,请按照以下步骤操作 1.首先通过导航到anaconda env文件夹找到环境变量

            Anaconda3/envs/"name_of_your_conda_environment"/etc/conda/activate.d

            它包含文件 keras_activate.bat,默认有 theano as 后端。 将值更改为 tensorflow 并保存文件。 KERAS_BACKEND=张量流

            停用环境并再次激活它 即

            source deactivate name_of_your_conda_environment
            source activate name_of_your_conda_environment
            

            希望这将解决所有 keras 后端 tensorflow 问题。

            【讨论】:

              【解决方案8】:

              对于 Windows 用户,在我的 Windows 10 中,Anaconda 创建 .bat 文件的方式似乎有点奇怪,或者至少它们是如何执行的。它们在 cmd 中显示写入的每个命令。
              至少在我的情况下是这样。
              所以对我来说它总是说:"KERAS_BACKEND=theano",但那没有被执行。

              检查一下:

              在此路径中:&lt;your_conda_install_location&gt;\envs\&lt;your_environment_name&gt;\etc\conda\activate.d 你会找到一个.bat 文件。
              (将路径引用中的 &lt;whatever&gt; 替换为您的系统特定名称)

              还要检查keras.json 文件是否将后端设置为 tensorflow。

              我的内容是:

              :: Figure out the default Keras backend by reading the config file.
              python %CONDA_PREFIX%\etc\keras\load_config.py > temp.txt
              set /p KERAS_BACKEND=<temp.txt
              del temp.txt
              
              :: Try to use the default Keras backend.
              :: Fallback to Theano if it fails (Theano always works).
              python -c "import keras" 1> nul 2>&1
              if errorlevel 1 (
                  ver > nul
                  set "KERAS_BACKEND=theano"
                  python -c "import keras" 1> nul 2>&1
              )
              

              我只是添加了@echo off,因此它不会显示所有代码,并添加了一些控制台输出来告诉我实际执行了什么。这同时作为一种调试器或证明它实际上没有执行set "KERAS_BACKEND=theano"
              (向下滚动查看完整编辑的 .bat 文件)

              在上面我补充说:

              @echo off
              :: message variables
              set er0=used default Keras backend tensorflow
              set er1=used fallback Keras backend theano
              

              对于消息:
              结尾处:: Figure out the default Keras backend by reading the config file.

              if errorlevel 0 (
                  echo %er0%
                  )
              

              :: Fallback to Theano if it fails (Theano always works)的if里面:

              echo %er1%
              


              现在是.bat完整代码,以获得更好的概览:

              @echo off
              :: message variables
              set er0=used default Keras backend tensorflow
              set er1=used fallback Keras backend theano
              
              :: Figure out the default Keras backend by reading the config file.
              python %CONDA_PREFIX%\etc\keras\load_config.py > temp.txt
              set /p KERAS_BACKEND=<temp.txt
              del temp.txt
              if errorlevel 0 (
                  echo %er0%
                  )
              
              :: Try to use the default Keras backend.
              :: Fallback to Theano if it fails (Theano always works).
              python -c "import keras" 1> nul 2>&1
              if errorlevel 1 (
                  ver > nul
                  set "KERAS_BACKEND=theano"
                  echo %er1%
                  python -c "import keras" 1> nul 2>&1
              )
              

              因此,现在 cmd 上只有消息说明是否使用了默认后端,或者如果出现错误,它是否使用了 theano 后端。
              另外一定要检查keras.json 的后端设置为 tensorflow。

              我希望这可以帮助一些 Windows 用户。

              【讨论】:

                【解决方案9】:

                你不能显式调用 import keras。 使用:

                import tensorflow as tf

                现在你可以使用了:

                tf.keras

                【讨论】:

                  【解决方案10】:

                  在路径"/anaconda2/envs/py2/etc/conda/activate.d" 中有一个文件keras_activate.sh

                  然后编辑它,删除内容:

                  "if [ "$(uname)" == "Darwin" ]
                  

                  然后

                      # for Mac OSX
                      export KERAS_BACKEND=tensorflow
                  elif [ "$(uname)" == "Linux" ]
                  

                  然后

                      # for Linux
                      export KERAS_BACKEND=theano
                  fi". 
                  

                  然后,添加以下行:

                  set "KERAS_BACKEND=tensorflow"
                  

                  【讨论】:

                    【解决方案11】:

                    首先你必须安装以下python版本之一

                    然后使用以下命令安装张量流作为后端引擎:

                    pip3 install --upgrade tensorflow
                    

                    然后使用以下命令安装 keras:

                    pip3 install keras
                    

                    更多信息在这里:http://royalcrowntutorials.blogspot.com/2018/02/installing-tensor-flow-start-terminal.html

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2021-11-28
                      • 1970-01-01
                      • 2018-01-26
                      • 2018-10-02
                      • 1970-01-01
                      • 2018-04-26
                      • 2016-12-19
                      • 2018-08-16
                      相关资源
                      最近更新 更多