尝鲜TensorFlow 2.0

2019-07-02 14:46:45 浏览数 (1)

前两天,Google在TensorFlow开发者峰会上发布了TensorFlow 2.0 alpha版,TensorFlow官网也全新改版上线。其实早在去年上半年,Google就放出口风,准备发布TensorFlow 2.0,一个重要的里程碑版本。然而直到今天,2.0仍然处于alpha版,这在快速迭代的人工智能领域,着实少见。随着alpha的发布,这几天网上关于TensorFlow的新闻和文章铺天盖地,我也看了一下文章,不过作为一名实战派,还是决定先上手尝鲜一下。

毕竟TensorFlow 2.0还是alpha版,不想破坏掉现有的TensorFlow的环境,所以决定先创建一个虚拟环境,在虚拟环境中进行尝鲜。借助于anaconda,可以轻松创建名为tf-alpha的python虚拟环境:

代码语言:javascript复制
conda create -n tf-alpha python==3.6
conda activate tf-alpha

接下来就是安装tensorflow 2.0 alpha,如果想简单一点,可以安装非GPU版本的tensorflow:

代码语言:javascript复制
pip install tensorflow==2.0.0-alpha0

当然要训练深度学习的模型,一定得利用上GPU,否则那速度让人无法忍受,所以我决定还是安装GPU版本:

代码语言:javascript复制
pip install tensorflow-gpu==2.0.0-alpha0

因为我之前安装过CUDA,想着这样一步就足够了,接下来就是运行一个简单的示例:

代码语言:javascript复制
import tensorflow as tf

a = tf.constant([1, 2])
b = tf.constant([3, 4])
print(a   b)

作为一个常年摆弄各种环境的老司机,开始出现如下错误,我丝毫也不感到意外:

代码语言:javascript复制
ImportError: libcudart.so.10.0: cannot open shared object file: No such file or directory

毕竟,各种软件兼容问题是一门玄学,你永远也无法估计会踩到什么雷。既然遇到问题,就得解决问题。到网上一搜,有类似的问题,大意就是CUDA的版本不匹配,查了一下,TensorFlow 2.0 alpha需要搭配10.0版本的CUDAToolKit,而我之前安装的是9.2版本。

接下来就是更新10.0版本的CUDAToolKit,然而,这里还有一个坑,CUDAToolKit最新的版本是10.1,别看就一个小版本号的差别,我就栽在这上面了。安装10.1之后,仍然提示找不到上面的so,尝试创建一个软链接,链接到10.1版本的so上,结果又提示版本不正确。最后还是老老实实下载10.0版本。在nvidia官网,10.0属于legacy release,需要去 https://developer.nvidia.com/cuda-toolkit-archive 下载。下载之后执行如下命令安装:

代码语言:javascript复制
sudo dpkg -i $HOME/Downloads/cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda

为了让ld能够加载cuda 10.0的库,还需要在$HOME/.bashrc中加入如下:

代码语言:javascript复制
export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH"

再次执行以上示例代码,可以得到以下的结果:

代码语言:javascript复制
tf.Tensor([4 6], shape=(2,), dtype=int32)

TensorFlow 2.0 Alpha 版的更新重点放在简单和易用性上,主要进行了以下更新:

  • 使用 Keras 和 eager execution,轻松建立简单的模型并执行
  • 在任何平台上的实现生产环境的模型部署
  • 为研究提供强大的实验工具
  • 通过清除不推荐使用的 API 和减少重复来简化 API

对我来说,最重要的更新就是更好的融合Keras 和 eager execution。我之前一直都是使用keras编写代码,在TensorFlow 2.0中,我可以使用我更加熟悉的keras API。而所谓的eager execution,简单所就是操作(op)能够立即执行。在TensorFlow 1.x中,我们需要首先构建图形,然后通过tf.Session.run()执行图形的各个部分。比如前面那么的示例代码,在TensorFlow 1.x中a b并不会立即执行,而是发生在tf.Session.run()之后。

由于时间有限,我还没有来得及深入到TensorFlow 2.0,有兴趣的朋友可以访问TensorFlow官网:

  • TensorFlow 2.0 Alpha 版官方网址:https://www.tensorflow.org/alpha
  • TensorFlow 2.0 Alpha 版开源地址:https://github.com/orgs/tensorflow/projects/4

针对不同级别的开发者,TensorFlow 2.0 Alpha 版设置了两版教程:

  • 初学者版:使用的是 Keras Sequential API,这是最简单的 TensorFlow 2.0 入门方法。
  • 资深人士版:展示如何命令式地编写正向传递、如何使用 GradientTape 编写自定义训练循环,以及如何使用 tf.function 一行代码自动编译代码。

另外还推荐吴恩达的课程:TensorFlow: From Basics to Mastery。如果你不需要颁发的证书,可以免费观看教学视频和学习资料,全英文,可以顺便练习一下英文。

0 人点赞