前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >掌握TensorFlow1与TensorFlow2共存的秘密,一篇文章就够了

掌握TensorFlow1与TensorFlow2共存的秘密,一篇文章就够了

作者头像
蒙娜丽宁
发布2020-04-14 16:21:00
6.2K0
发布2020-04-14 16:21:00
举报
文章被收录于专栏:极客起源
目录:

1. 查看Anaconda中的所有虚拟环境

2. 创建和移除Anaconda虚拟环境

3. 克隆Anaconda虚拟环境

方式1:使用yml文件

方式2:使用--clone命令行参数克隆虚拟环境

4. 安装和移除TensorFlow2.x

5. 安装和移除TensorFlow1.x

6. 在PyCharm中切换TensorFlow1和TensorFlow2

TensorFlow是Google推出的深度学习框架,也是使用最广泛的深度学习框架。目前最新的TensorFlow版本是2.1。可能有很多同学想跃跃欲试安装TensorFlow2,不过安装完才发现,TensorFlow2与TensorFlow1的差别非常大,基本上是不兼容的。也就是说,基于TensorFlow1的代码不能直接在TensorFlow2上运行,当然,一种方法是将基于TensorFlow1的代码转换为基于TensorFlow2的代码,尽管Google提供了转换工具,但并不保证能100%转换成功,可能会有一些瑕疵,而且转换完仍然需要进行测试,才能保证原来的代码在TensorFlow2上正确运行,不仅麻烦,而且非常费时费力。所以大多数同学会采用第二种方式:在机器上同时安装TensorFlow1和TensorFlow2。这样以来,运行以前的代码,就切换回TensorFlow1,想尝鲜TensorFlow2,再切换到TensorFlow2。那么具体如何做才能达到我们的目的呢?本文将详细讲解如何通过命令行的方式和PyCharm中安装多个Python环境来运行各个版本TensorFlow程序的方法。

不管安装哪一个版本的TensorFlow,都需要Python环境。推荐安装Anaconda环境,因为Anaconda环境不仅包含了Python运行环境,还包含了很多常用的Python库。如numpy、pandas等。不过Anaconda本身并不包含TensorFlow。Anaconda环境除了附带了众多Python库外,还支持多个虚拟环境,这这是TensorFlow1.x和TensorFlow2.x共存的关键。

读者可以到下面的页面下载与您使用的平台对应的Anaconda版本,然后直接安装即可。

https://www.anaconda.com/distribution/

1. 查看Anaconda中的所有虚拟环境

由于在机器上安装多个TensorFlow环境,需要依赖于Anaconda的虚拟环境。所以首先使用下面的命令查看Anaconda当前的虚拟环境。

conda info --envs

如果是新安装的Anaconda,会输出下图所示的信息。这是在Linux下的输出结果,在Windows和macOS下的输出结果类似。

我们可以看到,Anaconda最初只有一个名为base的环境,这是默认的换。如果下载的是Python3.7的Anaconda版本,那么这个环境的Python版本就是Python3.7。并不建议读者直接修改base环境。而是建立两个单独的虚拟环境来分别安装TensorFlow1.x和TensorFlow2.x。

2. 创建和移除Anaconda虚拟环境

可以通过下面的命令创建一个名为tf2的虚拟环境。这里创建Python版本为3.7.4的虚拟环境

conda create --name tf2 python=3.7.4

在创建的过程中会询问是否安装必要的包,如下图所示。

输入y,按Enter键,会安装这些包。如果成功创建了tf2虚拟环境,那么会输出如下图的信息。

注意,在创建虚拟环境的过程中,会通过Internet下载相关的库,可能在国内有些慢。最好的方式是设置国内的镜像。读者可以使用下面的命令查看Anaconda当前的镜像。

conda config --show channels

如果在此之前设置了其他的镜像,可以使用下面的命令删除这些镜像。

conda config --remove channels 镜像名

这里的镜像名就是使用conda config --show channels命令列出的镜像名。

读者可以使用下的命令添加新的镜像。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

conda config --set show_channel_urls yes

conda config --set show_channel_urls yes的意思是从channel中安装包时显示channel的url,这样就可以知道包的安装来源了。

如果想删除某一个镜像(channel),可以使用下面的命令:

conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

设置完镜像后,使用conda config --show channels命令,会看到新添加的镜像,如下图所示。

现在回到主题,在前面已经创建了一个名为tf2的虚拟环境,接下来用下面的命令激活tf2。

conda activate tf2

如果想移除虚拟环境,可以使用下面的命令:

conda remove -n tf2 --all

3. 克隆Anaconda虚拟环境

通过前面的命令创建的虚拟环境只安装了一些基本的库,如果想与base环境安装相同的库,可以使用下面两种方式创建虚拟环境。

方式1:使用yml文件

yml文件是普通的文本文件,里面包含了当前虚拟环境已经安装的部分或全部的库的目录,Anaconda会根据yml文件在其他虚拟环境中安装这些库。操作步骤如下:

步骤1:导入yml文件

切换到base环境,然后使用下面的代码导出yml文件(注意,文件扩展名必须是yml,文件名可以随便起)。

conda env export | grep -v "^prefix: " > env.yml

在这条命令里使用grep去除了带prefix的项,如果不去除,在env.yml文件中就会多了类似下面的项,这是当前环境的,在导入时不需要。

prefix: /Users/lining/opt/anaconda3

步骤2:导入yml文件

使用下面的命令在创建虚拟环境时会根据env.yml文件中的内容安装相应的库,需要使用-p命令行参数指定虚拟环境的绝对路径,如/home/user/anaconda3/envs/tf2。

conda env create -f env.yml -p /home/user/anaconda3/envs/tf2

或者使用-n或--name指定虚拟环境的名字:

conda env create -f env.yml -n tf2

在安装完相关的库后,可能当前的python可执行程序指向的不是/home/user/anaconda3/envs/tf2/bin/python,所以可以进入/home/user/anaconda3/envs/tf2/bin目录执行python命令,或将该命令的路径添加到Path环境变量中。

当然,使用conda activate tf2命令切换到tf2环境后,就不需要切换路径了,直接执行python命令即可。

方式2:使用--clone命令行参数克隆虚拟环境

使用下面的命令创建一个名为new_env的新虚拟环境,该虚拟环境会从本地克隆名为tensorflow2的虚拟环境中的所有内容(包括各种库)。克隆成功后,会显示如下图所示的信息。

conda create --name new_env --clone tensorflow2

4. 安装和移除TensorFlow2.x

本文主要用Ubuntu Linux讲解,Windows、macOS和Linux的操作基本一样。

到现在为止,虚拟环境已经准备完了,现在切换到tf2虚拟环境,然后使用下面的命令安装TensorFlow2。

安装不支持GPU的TensorFlow版本

pip install tensorflow

安装支持GPU的TensorFlow版本

pip install tensorflow-gpu

如果要升级TensorFlow,可以使用--upgrade命令行参数,命令如下:

pip install --upgrade tensorflow

pip install --upgrade tensorflow-gpu

与conda命令一样,使用pip命令在国内同样面临下载缓慢的问题,所以可以使用-i命令行参数指定pip的国内镜像,命令如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow-gpu

执行上面的命令会自动下载安装最新的TensorFlow版本,目前是TensorFlow2.x,有大概421M,使用国内镜像一会就安装完。

现在进入python控制台,执行import tensorflow as tf命令导入TensorFlow库,然后执行tf.version查看TensorFlow的版本,我们会看到,版本是v2。如下图所示。在导入TensorFlow时可能会显示如下图的提示信息,这说明与GPU相关的库没有安装,需要到https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html下载相关的库进行安装,如果只是做实验,不使用GPU的问题不大,所以读者不需要理会这些提示,并不影响正常使用TensorFlow训练模型。

移除TensorFlow,可以使用下面的命令

pip uninstall tensorflow

5. 安装和移除TensorFlow1.x

按前面的方法创建一个名为tf1的虚拟环境,然后使用conda activate tf1切换到该虚拟环境。然后使用下面的命令安装TensorFlow1.x的最新版(1.15)。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ tensorflow==1.15

安装完后,进入python控制台,然后查看TensorFlow的版本,会输出如下图的信息(很明显,输出版本是v1)。

如果想使用TensorFlow2,那么只要使用conda activate tf2切换到tf2虚拟环境即可,使用TensorFlow1,再使用同样的方法切换回tf1虚拟环境。

6. 在PyCharm中切换TensorFlow1和TensorFlow2

使用TensorFlow训练模型,通常不会使用记事本或vi来编辑代码,这些简单的文本编辑器效率太低了。一般会选一款Python IDE,这里强烈推荐PyCharm,这是目前应用最广泛的Python IDE。这一节就介绍如何在Python IDE中拥有多个TensorFlow环境。

PyCharm仍然会使用Anaconda的虚拟环境。可以在PyCharm中创建新的Anaconda虚拟环境,也可以使用以前创建的虚拟环境。

现在进入PyCharm,打开Settings对话框(macOS版PyCharm是Preferences对话框),找到Project Interpreter节点,点击该节点,在右侧会显示如下图的页面。

该页面是目前PyCharm所有已经配置的Python环境以及当前环境已经安装的库、版本等信息。如果要添加新的环境,可以点击Project Interpreter列表右侧的按钮,会打开Add Python Interpreter对话框。如下图所示。在左侧显示了可以建立的Python环境种类。如果要使用虚拟环境,可以使用前两项。其实这两项的效果类似。如果这个虚拟环境是Anaconda的,建议第2类(Conda Environment),进入该类环境,会显示如下图所示的页面。与第1类不同的是,如果选择已经存在的环境,会在Interpreter列表中列出已经在Anaconda中创建的虚拟环境,如下图所示。读者可以选择一个。例如,在前面创建的tf1和tf2。

当然,使用第一类虚拟环境也可以,不过要手动找打Anaconda虚拟环境目录,并选择虚拟环境中的python可执行文件(windows是python.exe),如下图所示。这里建议选择已经创建的虚拟环境,如果要新创建虚拟环境也可以,不过要使用前面讲的方法重新安装TensorFlow的各个版本。

创建完虚拟环境,点击OK按钮关闭Settings对话框,这是PyCharm会对新的虚拟环境重新建立索引,那么为什么要建立索引呢?这是因为PyCharm是支持支持编辑器的。也就是说,你输入一个对象变量,PyCharm会列出该对象中所有的属性、方法。那么这些数据是如何来的呢?Python并不像Java一样有class文件,可以直接通过反射获取。Python需要事先扫描虚拟环境中所有已经安装的模块中的函数、方法、属性,然后将其记录在PyCharm中,这样PyCharm才能知道当前虚拟环境有哪些模块,模块中有什么函数、方法、类、属性。所以这一过程比较慢,要耐心等待。

当建立索引完成后,创建一个test.py文件,然后输入Import ,再输入tensorflow中的前几个字母,PyCharm就会列出以这前几个字母开头的所有模块,如下图所示。这就是PyCharm扫描完所有模块后给用户的反馈。如果不建立索引,这些数据是根本出不来的。

然后可以编写下面的代码看看当前TensorFlow的版本。

代码语言:javascript
复制
import tensorflow as tf
print(tf.version)

如果要切换TensorFlow环境,可以在PyCharm右上角点击运行列表的第1项:Edit Configurations...,如下图所示。

点击Edit Configurations...项,会弹出Run/Debug Configurations对话框,如下图所示。在左侧列表选择运行项,在右侧找到Python interpreter列表框,在里面选择已经创建的PyCharm运行环境。然后点击OK按钮关闭对话框,这时再运行test.py,就会使用新选择的Python虚拟环境了。

现在是不是很方便呢?当然,还可以利用虚拟环境来解决其他库的多版本共存问题。在后续的文章中,将利用这些技术来深入讲解关于机器学习、TensorFlow1和TensorFlow2的相关技术,欢迎关注我的后序文章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客起源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档