当前位置: 首页 > 科技观察

带你完成TensorFlow的安装

时间:2023-03-16 18:19:40 科技观察

1。基本介绍和理解1.1简介作为一个全面灵活的开源机器学习平台,我们可以使用TensorFlow创建适用于桌面、移动、Web和云环境的机器学习模型,或者简单地说,TensorFlow是一个开源机器学习框架。我们可以使用TensorFlow快速搭建神经网络,同时快速训练、评估和保存网络。我们安装好TensorFlow之后,每次使用的时候直接将TensorFlow导入为tf就可以了。TensorFlow官网如下:关于TensorFlow|TensorFlow中文官网(google.cn)1.2优缺点分析及架构解读灵活性强:只要能将计算表达为计算流图,就可以使用TF。●真正的便携性:支持台式机、服务器(CPU和GPU)和嵌入式设备。●多语言支持:基于Python,同时提供C++用户界面和Ipython交互界面。●可视化工具:TensorFlow提供了强大的可视化工具TensorBoard。●丰富的封装库支持:TFlearn、TF-Slim、Keras等。1.2.2缺点●不支持Windows除了TensorFlow拥有的所有优点外,它对Windows用户的功能非常有限。它对Linux用户非常友好。●支持GPUTensorFlow仅NVIDIA支持GPU,Python编程语言支持GPU编程。1.2.3TensorFlow架构解读第一层:设备通信层,由设备层和网络层组成,负责网络通信和设备管理。设备管理可以实现TF设备的异构特性,设备层支持CPU、GPU、Mobile等不同设备的通信。网络通信依赖gRPC通信协议实现不同设备之间的数据传输和更新。第二层:Kernel实现层,以Tensor为处理对象,依赖网络通信和设备内存分配,实现Tensor的各种运算或计算,主要是机器学习的内核实现。第三层:图计算层,由分布式主控和数据流执行器组成,包括本地计算流图和分布式计算流图的实现。分布式主控根据负载能力将不同的工作负载分配到不同的设备上,数据流执行器根据最佳实验方法执行数据流图。第四层:API接口层,CAPI是TF功能模块接口的封装,用C语言实现。选择C??语言是因为它是一种简单、快速、可靠并且可以在任何操作系统上运行的低级语言。第五层:Client层,Python、C++等编程语言在应用层通过API接口层调用TF核心功能,实现相关实验和应用。TensorFlow的最后一层包含用Python和C++实现的训练和推理库。如果想全面了解TensorFlow入门实践的基本理论和设计思路,可以到中大MOOC学习《 TensorFlow 入门实操课程 》,快速上手TensorFlow的基本应用和实践。2.安装与使用2.1安装这里以Ubuntu16.04及以上版本(64位)为例进行说明2.1.1使用pip安装PIP是一个包管理系统,用于安装和管理用Python编写的软件包。首先我们需要安装python环境,需要使用Python3.6-3.9和pip19.0及更高版本。如果不确定我们是否已经安装,可以通过版本检查来确认是否可以继续。python3–versionpip3–version如果没有安装,请参考以下代码:sudoaptupdatesudoaptinstallpython3-devpython3-pippython3-venv重点:其实这里安装python我推荐安装anaconda,可以省很多事,anaconda包括conda、Python和190多个科学包及其依赖。可以减少各种库问题和版本问题。其次,要营造环境。这里的建议是安装虚拟环境。最后,我们激活虚拟环境,然后在虚拟环境中执行TensorFlowpip打包安装pipinstall--upgradeTensorFlow安装完成后可以验证,确保安装成功python-c"importTensorFlow2.1.2源码编译安装gitclone--recurse-submoduleshttps://github.com/TensorFlow/TensorFlow安装参考http://bazel.io/docs/install.htmlConfigure./configure根据自己的实际情况如实回答一系列问题,回答完毕后,bazel会配置环境,这时候需要机器可以访问外网,很容易获取一些编译依赖,有些包可能需要翻墙,编译bazelbuild-copt--config=cuda//TensorFlow/tools/pip_package:build_pip_package2.1.3Docker镜像安装Docker是一个开源的应用容器引擎,可以让开发者打包自己的应用和d依赖到一个可移植的容器中,然后发布到任何流行的Linux机器上,虚拟化也是可能的。当你通过Docker安装和运行TensorFlow时,它与之前安装在你的机器上的是一样的。安装的包是完全隔离的。官方镜像官方提供4个Docker镜像供使用:仅CPU版,无开发环境:gcr.io/TensorFlow/TensorFlow仅CPU版,开发环境:gcr.io/TensorFlow/TensorFlow:latest-devel支持GPU,无开发环境:gcr.io/TensorFlow/TensorFlow:latest-gpu支持GPU,开发环境:gcr.io/TensorFlow/TensorFlow:latest-devel-gpu创建Docker用户组,让普通用户无需sudo即可启动容器。usermod-a-Gdocker用户名来启动Docker容器。我用的是支持GPU的版本,所以选择第四个安装。你可以查看你的电脑支持什么版本,然后下载相应的命令。dockerrun-itgcr.io/TensorFlow/TensorFlow2.2使用2.2.1占位符语法:tf.compat.v1.placeholder(dtype,shape=None,name=None)示例1:w=tf.constant([1,1,2,2,3,3],shape=[2,3])h=tf.constant([7,7,9,9,11,11],shape=[3,2])#下面的语法表示两个矩阵相乘l=tf.matmul(w,h)和tf.Session()asprint(sess.run([a,b,c]))示例2:首先importimportTensorFlowastfw=tf.placeholder(dtype=tf.float32)h=tf.placeholder(dtype=tf.float32)sum=tf.add(w,h)##填充数据时,使用run()方法的feed_dict参数指定对应的值张量,数据格式类似于字典。withtf.Session()assess:#fillplaceholders,fillformclassdictionaryres=sess.run(sum,feed_dict={w:[5],h:[6]})print(res)具体参数说明:●dtype:张量中元素的数据类型,将被输入。●shape:默认为None:将要输入的张量的形状,它是一个可选参数。如果没有指定形状,可以输入任何形状的张量。●name:默认为None:操作的名称,可选参数。2.2.2变量Variable()构造函数期望变量有一个初始值,可以是任何类型或形状的Tensor。变量的类型和形式由其初始值定义。形状和变量一旦创建就固定了。在众多参数中,需要注意的是validate_shape:默认为True。如果为False,则允许使用未知形状值初始化变量。如果为True,则必须知道初始值的形状,这是默认值。2.2.2.1创建变量创建变量最常用的方法是使用Variable()构造函数。importTensorFlowastfv=tf.Variable([1,2,3,4,5,6])#将变量v创建为数组print(v)#检查v的形状,而不是v的值。##结果是:withtf.Session()assess:sess.run(v.initializer)##运行变量的初始化器。所有变量都应在调用op之前显式初始化。sess.run(v)##查看v的值,结果为:array([1,2,3,4,5,6])注意:我们也可以在初始化的时候这样写init=tf.global_variables_initializer()#Globalvariableinitializationwithtf.Session()assess:sess.run(init)2.2.2.2赋值或修改变量中的元素我们使用assign()方法来修改这个变量。例1:assign用于更新值w=tf.Variable([3,4,5,6])w[1].assign(2)w输出结果如下:##这里我们使用assign将数组中索引1的值从4更新为2例2:assign_add()用于添加变量值#createvariablew=tf.Variable([3,4,5,6])#usingassign_add()functionw.assign_add([1,1,1,1])w输出结果如下:##这里我们使用assign_add()来为数组中的每个值分配Add1foroutput示例3:assign_sub()用于从变量中减去值#createvariablew=tf.Variable([3,4,5,6])#usingassign_add()functionw.assign_sub([1,1,1,1])w##我们使用assign_sub()将数组中的每个值减1以输出2.2.2.3改变变量的形状tf.reshape()method用于改变变量的形状。必须传递变量和形状。importTensorFlowastfw=tf.Variable([[3,5,6,7]])tf.reshape(w,shape=(2,2))w输出结果如下:2.2.3Session在TensorFlow中,只有Graph(计算图)上的节点在会话(session)执行得到结果。Session的开启涉及真正的计算,所以比较消耗资源。使用后一定要关闭Session。方法一手动关闭:importTensorFlowastfw=tf.constant(8,dtype=tf.int8)h=tf.constant(6,dtype=tf.int8)result=w+hsess=tf.Session()sess.run(result)#执行操作sess.close()#手动关闭session方法二自动关闭(使用with语句):importTensorFlowastfw=tf.constant(8,dtype=tf.int8)h=tf.constant(6,dtype=tf.int8)result=w+hwithtf.Session()assess:#运行结束后session自动关闭。在大学MOOC上学习《 TensorFlow 入门实操课程 》,快速了解如何使用TensorFlow构建和训练神经网络,使用自然语言处理系统教机器理解、分析和响应人类语音,构建和训练模型等基础理论。推荐有模型部署需求的同学可以了解《 TensorFlow 入门课程 - 部署篇 》,高效掌握在各种生产场景下灵活部署模型的技巧。大家也可以在TensorFlow官网(https://tensorflow.google.cn/)探索更多学习资源,不断提升机器学习知识和技能!作者介绍张云波,现役IT网红讲师,学员31万+,国内较早开创并发布AppleSwift、AndroidKotlin、微信小程序、区块链技术的讲师之一。主要专注于前端开发、iOS开发、Android开发、Flutter开发、区块链Dapp开发,有丰富的大公司和海外工作经验。