机器学习是当前一大热门,涉及领域也十分广泛。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。tensorflow是一个基于数据流编程的符号数学系统,被广泛用于各类机器学习算法的编程实现,已然成为机器学习生态系统中的重要基石。
由Goole Brain开源, 设计初衷是加速机器学习的研究。2015年11月在GitHub上开源,2016年4月分布式版本,2017年发布了1.0版本,趋于稳定
Google希望让这个优秀的工具得到更多的应用,从整体上提高深度学习的效率
TensorFlow中的计算可以表示为一个有向图(Directed Graph)
或者称为计算图(Computation Graph),其中每一个运算操作(operatin)将作为一个节点(node),计算图描述了数据的计算流程,也负责维护和更新状态(更新w参数)。用户通过python, c++, go, java语言设计这个数据计算的有向图,计算图的每一个节点可以有任意多个输入和任意多个输出,每一个节点描述了一种运算操作,节点可以算是运算操作的实例化(instance),计算图中的边里面流动(flow)的数据被称为张量(tensor),故而得名 TensorFlow。
TensorFlow官方网址:https://tensorflow.google.cn/
GitHub网址: github.com/tensorflow/tensorflow
模型仓库网址: github.com/tensorflow/models
Python
C++
Go
Java
后端使用C++, CUDA
Android系统
Chromium浏览器
Go编程语言
JavaScript引擎V8
Protobuf数据交换框架
Bazel编译工具
OCR工具Tesseract
TensorFlow实现的算法可以在众多异构的系统上方便地移植,比如Android手机,iphone,
普通CPU服务器,大规模GPU集群
除了执行深度学习算法,TensorFlow还可以用来实现很多其他算法,包括线性回归,逻辑回归,随机森林等
TensorFlow建立的大规模深度学习模型应用场景也非常广,包括语音识别、自然语言处理、计算机视觉、机器人控制、信息抽取、药物研发、分子活动预测
学习tensorflow之前需要先有一定的编程和机器学习经验,可将其理解为学习机器学习的计算抽象框架。
tensorflow的安装包括在cpu的安装和在gpu的安装,在Linux/Ubuntu系统中包括cpu的安装和在gpu上的安装,而在Mac OS X 系统中,从1.2版本开始,不再支持gpu的安装。tensorflow的安装包括以下几种方式:
首先需要在使用的环境中安装TensorFlow,TensorFlow 的 Ubuntu/Linux 安装分为 CPU 版本和 GPU 版本
(1)安装仅支持 CPU 的版本,直接安装如下:
pip install tensorflow==1.13.1
(2)安装支持 GPU 的版本的前提是已经安装了 CUDA SDK,直接使用下面的命令:
pip install tensorflow-gpu==1.13.1
安装完成后导入模块
import tensorflow as tf
虽然对于大多数人来说,tensorflow的开发语言是python,但它并不是有一个标准的的python库。在理解上,tensorflow与html框架类似,tensorflow是一种用于表示某种类型的计算抽象的框架,目前主要用于神经网络的训练。
查看tensorflow安装版本
__ version__ = pywrap_tensorflow.__ version__
import tensorflow
print(tensorflow.__version__)
区别在于:tf.InteractiveSession()加载它自身作为默认构建的session,它能让你在运行图的时候,插入一些计算图,这些计算图是由某些操作构成的。
tensor.eval()和operation.run()取决于默认的session.需要启动session之前构建整个计算图,然后启动该计算图。
换句话说:InteractiveSession 输入的代码少,原因就是它允许变量不需要使用session就可以产生结构,使用InteractiveSession来构建会话的时候,我们可以先构建一个session再定义操作,而使用tfsession( )来构建会话,我们需要在会话构建之前定义好全部的操作,再构建会话。
以 f = x^2*y+y+2为例,进行使用方法的展示。
下面这几个是等价的:
sess = tf.InteractiveSession()
sess = tf.Session()
with sess.as_default():
with tf.Session() as sess:
tensorflow的安装包括cpu安装和gpu安装,运行安装的设备也可根据需要进行选择,可选择默认和进行设备指定。
TensorFlow程序可以通过tf.device函数来制定运行每一个操作的设备,这个设备可以是本地的CPU或GPU,也可以是某一台远程的服务器。
TensorFlow会给每一个可用的设备一个名称,tf.device函数可以通过设备的名称,来指定运算的设备,比如CPU在TensorFlow中的名称为/cpu:0。在默认情况下,即使机器有多个CPU,TensorFlow也不会区分它们,所有的CPU都是用/cpu:0作为名称。
而一台机器上不同GPU的名称是不同的,第n个GPU在TensorFlow中的名称为/gpu:n,比如第一个GPU的名称为/gpu:0,第二个GPU名称为/gpu:1,以此类推。
TensorFlow提供了一个快捷的方式,来查看运行每一个运算的设备,在生成会话时,可以通过设置log_device_placement参数来打印运行每一个运算的设备。除了可以看到最后的计算结果之外,还可以看到类似“add: /job:localhost/replica:0/task:0/cpu:0“这样的输出,这些输出显示了执行每一个运算的设备。比如加法操作add是通过CPU来运行的,因为它的设备名称中包含了/cpu:0。在配置好GPU环境的TensorFlow中,如果操作没有明确的指定运行设备,那么TensorFlow会优先选择GPU。
对x指定cpu设备:
with tf.device('/cpu:0'):
x= tf.Variable(3,name='x')
对y选择默认设备
y = tf.Variable(4,name='y')
tf.Variable 生成的变量,每次迭代都会变化,这个变量就是要去计算的结果,所以要计算什么,就把什么定义为Variable
f= x*x*y +y +2
启动默认图,创建一个计算图的上下文环境
记录设备指派情况:config=tf.ConfigProto(log_device_placement=True;log_device_placement:具体过程在哪里执行把他打印出来
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
调用sess的run( )方法来执行op,传入参数,进行设备初始化
//整个执行过程是自动化的, 会话负责传递 op 所需的全部输入. op 通常是并发执行的.
sess.run(x.initializer) //初始化
sess.run(y.initializer)
result = sess.run(f) //调用run方法(碰到session.run()就会立刻去调用计算)
print(result) //返回值 'result' 是一个 numpy `ndarray` 对象
任务完成,一定不要忘记关闭会话
sess.close()
在with块内部,session被设置为默认的session
import tensorflow as tf
x= tf.Variable(3,name='x')
y = tf.Variable(4,name='y')
f= x*x*y +y +2
with tf.Session() as sess:
x.initializer.run() // 等价于 tf.get_default_session().run(x.initializer)
y.initializer.run()
result = f.eval() // 等价于 tf.get_default_session().run(f)
print(result)
可以不分别对每个变量去进行初始化,并不立即初始化,在run运行的时候才初始化
import tensorflow as tf
x= tf.Variable(3,name='x')
y = tf.Variable(4,name='y')
f= x*x*y +y +2
#用一句话表示所有的初始化
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
result = f.eval()
print(result)
InteractiveSession 自动设置它自己为默认的session
import tensorflow as tf
"""
构建阶段
"""
x= tf.Variable(3,name='x')
y = tf.Variable(4,name='y')
f= x*x*y +y +2
init = tf.global_variables_initializer()
"""
执行阶段
"""
sess =tf.InteractiveSession()
init.run()
result =f.eval()
print(result)
sess.close()
TensorFlow程序会典型的分为两部分,第一部分是创建计算图,叫做构建阶段,这一阶段通常建立表示机器学习模型的计算图,和需要去训练模型的计算图。第二部分是执行阶段,执行阶段通常运行Loop循环重复训练步骤,每一步训练小批量数据,逐渐的改进模型参数。