内容导读
TensorFlow概述
TensorFlow环境搭建
TensorFlow计算机加速
一、TensorFlow概述
1、TensorFlow简介
TensorFlow是由Google开发的用于机器学习和人工智能的开源软件库,特别适用于深度神经网络的训练和推理。 它是一个基于数据流图的符号数学系统,设计用于解决复杂的数学问题,并广泛应用于机器学习、深度学习等领域。
TensorFlow可以做很多有趣的工作,如图像风格迁移,通过神经网络可以将一幅图片的风格迁移到另一幅图片上。
如图所示是荷兰后印象派画家梵•高的The Starry Night(《星月夜》),将其作为被迁移的图片。
原始图片为麻省理工学院Stata中心,迁移后的图片如下。
2、TensorFlow版本变化
为了让大家更好地理解TensorFlow,下面从3个不同的角度对其进行分析。
(1)TensorFlow的计算模型为计算图(Graph)
TensorFlow的名字本身由两个单词构成,即Tensor和Flow。Tensor指的是张量,在TensorFlow中,Tensorf可以简单地理解为多维数组,而Flow翻译过来是“流”,表达了张量之间通过计算进行相互转换的含义。
(2)TensorFlow的数据模型为张量(Tensor)
在TensorFlow中,所有的数据类型都表示为张量。张量是一个多维数组,如果直接打印某一个张量,并不会像打印List或NumPy一样输出它的值,而是会得到一个结构,结构中包括该张量的名称、维度和类型。
(3)TensorFlow的运行模型为会话(Session)
在TensorFlow中,有了数据模型以及计算模型后,在代码执行过程中需要使用会话,会话负责管理代码运行时的所有资源。如果没有指定,会话将会自动加入系统生成的默认计算图中,执行其中的运算。
3、分布式TensorFlow
分布式TensorFlow有一些基本概念
(1)task:一个task一般会关联到某个单一的TensorFlow服务端的处理过程,属于一个特定的Job,并且在该Job的任务列表中有唯一的索引,可以将其理解为每台机器上的一个进程。
(2)Job:Job分为ps、worker两种,一个Job包含一系列致力于某个相同目标的task。
(3)Cluster(集群):一个TensorFlow集群包含一个或者多个TensorFlow服务端,集群被切分为一系列Job,而每个Job又会负责一系列的task。一个集群会专注于一个相对高层的目标,如用多台机器并行地训练一个神经网络。
二、TensorFlow环境搭建
1、安装Anaconda
Anaconda是一个用于科学计算的Python发行版,它提供了便捷的包管理和环境管理功能,特别适用于数据分析、机器学习等领域。
(1)下载64位Anaconda,然后双击下载好的包进入安装界面,单击“Next >”按钮。
说明:目前此工具已更新到更高版本v24.1.2啦,安装过程与2019.03相同。
(2)进入同意许可(License Agreement)界面,单击“I Agree”按钮同意协议许可
(3)进入选择安装类型(Select Installation Type)界面,选中“All Users (requires admin privileges)”单选按钮,为计算机所有用户进行安装,单击“Next >”按钮
(4)进入选择安装路径(Choose Install Location)界面,单击“Browse”按钮选择安装路径,然后单击“Next >”按钮
(5)进入高级安装选项(Advanced Installation Options)界面,勾选复选框,单击“Install”按钮
(6)进入安装完成(Installation Complete)界面,等待安装完成,这个过程比较长,安装完成后单击“Next >”按钮
(7)进入软件推荐界面,Anaconda推荐使用PyCharm作为IDE,PyCharm的安装在第2章介绍过,单击“Next >”按钮
(8)进入感谢安装Anaconda界面,取消勾选复选框,相关知识将在本书后续内容中进行讲解,单击“Finish”按钮,完成安装
(9)安装完成后,打开命令提示符窗口,输入“conda -V”以获得Anaconda版本号,如果输出正常,证明Anaconda正确安装,如图所示(目前已更新到了高版本v24.1.2啦)
(10)找到并打开Anaconda Navigator软件,进入Anaconda界面模式,Anaconda Navigator图标如图
(11)Anaconda在默认环境“base(root)”,新建TensorFlow的环境,在主界面中选择“Environments”→“Create”目录,在弹出的对话框,进行相应设置
(12)等待创建完成,创建完成的界面
(13)新环境创建完成后,在命令提示符窗口输入“activate TensorFlow”,进入新环境,如图
2、使用pip的Windows环境安装
(1)CPU版本安装
在Anaconda的TensorFlow环境下的命令提示符窗口内输入“pip install tensorflow==1.9.0”,安装1.9.0版本的TensorFlow及其相关依赖包(安装过程需全程联网),如图。
说明:当前已更新为更高版本。
安装完成后测试是否安装成功,在Anaconda的TensorFlow环境下的命令提示符窗口内输入“python”,进入Python环境。
输入“import tensorflow as tf”命令,查看是否报错,不报错说明安装成功。
(2)GPU版本安装
安装GPU版本的TensorFlow之前需要查看自己的计算机或嵌入式设备是否支持该版本。
如果支持GPU版本的TensorFlow,在安装之前需要安装CUDA和cuDNN。
要安装cuDNN,需要注册成为NVIDIA用户,填写问卷调查才可以下载。
在安装时需注意CUDA、cuDNN的版本匹配问题,安装成功后,即可开始安装GPU版本的TensorFlow,可以新建一个Anaconda环境安装GPU版本的TensorFlow。
在Anaconda环境下的命令提示符窗口输入“pip install tensorflow-gpu==1.9.0”命令即可完成安装。
3、使用pip的Linux环境安装
在Linux(以Ubuntu为例)下安装Anaconda和在Windows下安装的过程一样,在Linux系统下安装完Python(很多Linux系统自带Python 2和Python 3)和pip工具。
直接输入“pip3 install tensorflow ==1.9.0”命令完成CPU版本TensorFlow的安装,如下所示:
# 目前已更新到高版本24.1.2
corday@ubuntu:~$ pip3 install tensorflow==1.9.0
4、使用源代码编译安装
在Linux操作系统上通过源码安装TensorFlow,需要使用Bazel编译工具。
安装依赖JDK8之后通过apt-get安装或者下载Bazel源码,然后安装Bazel编译工具。
Bazel编译工具安装完成后,下载TensorFlow源码目录。
进入TensorFlow的源码目录后,输入“./configure”命令进行TensorFlow编译安装配置。
配置过程中会出现Python路径询问等问题,可以根据自己的实际情况进行选择或者选择默认配置。
在配置完成后,采用Bazel命令安装TensorFlow,输入“bazel build -c opt /tensorflow/tools/pip_package:build_pip_package”。
安装完成后输入“bazel-bin/tensorflow/tools/pip_package/build_pip_package/tmp/tensorflow_pkg”命令,
在tmp/tensorflow_pkg目录下生成扩展名为.whl的文件,然后使用pip3命令安装该文件即可。
# 命令如下
pip3 install 文件名.whl
三、TensorFlow计算机加速
1、TensorFlow的使用
示例:新建TensorFlow目录,在TensorFlow目录下新建文件,命名为test.py,在PyCharm中编写代码实现向量的加法运算。
# tf.constant是一个计算,计算结果是一个张量,保存在变量a或者b中
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([3.0, 4.0], name="b")
# 将a和b相加,相加后的名字为“add”
result = tf.add(a, b, name = "add")
# 输出
print(result)
# 创建一个会话,通过Python上下文管理器来管理该会话
# 启动默认图表
with tf.Session() as sess:
print("a = [1.0, 2.0], b = [3.0, 4.0]")
print("两个向量相加: a + b = ", sess.run(result))
# 将数据写到日志中
summary_writer = tf.summary.FileWriter("log", sess.graph)
运行后效果图:
2、TensorFlow使用GPU加速
示例:在TensorFlow项目下新建test_gpu.py文件,使用GPU版本的TensorFlow实现向量的相加。
(在同一个环境下可同时安装CPU版本的TensorFlow和GPU版本的TensorFlow)
import tensorflow as tf
# 通过tf.device()将运算指定到CPU上
with tf.device("/cpu:0"):
a = tf.constant([1.0, 2.0], name="a")
b = tf.constant([3.0, 4.0], name="b")
# 通过tf.device()将运算指定到GPU上
with tf.device("/gpu:0"):
result = tf.add(a, b, name = "add")
# 利用log_device_placement将参与运算的设备输出
sess = tf.Session(config=tf.ConfigProto(log_device_placement = True))
print(sess.run(result))
由上代码可知,并不是所有的操作都放在GPU上,a = tf.constant([1.0, 2.0], name="a")和b = tf.constant([3.0, 4.0], name="b")。
两个定义a和b常量的操作会通过“with tf.device("/cpu:0")”函数加载到CPU上,使用result = tf.add(a, b, name = "add")做相加运算时,这个过程会被加载到GPU上,并且这个操作会将参与运算的设备信息打印出来。
在GTX1050上得到如下运算结果:
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1
add: (Add): /job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:CPU:0
b: (Const): /job:localhost/replica:0/task:0/device:CPU:0
[4. 6.]
更多精彩内容请关注本站!