主流的机器学习框架之一——TensorFlow

Posted 数据皮皮侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主流的机器学习框架之一——TensorFlow相关的知识,希望对你有一定的参考价值。



本文介绍了机器学习框架TensorFlow的安装和基本使用,并以一元线性回归为例介绍了如何使用TensorFlow进行简单的机器学习


本期导航


一、什么是机器学习

二、TensorFlow简介

三、TensorFlow的基本使用

四、安装TensorFlow

五、TensorFlow机器学习例子—— 一元线性回归


主流的机器学习框架之一——TensorFlow



一、什么是机器学习

机器学习计算机利用已有的数据(经验),得出了某种模型(规律),并利用此模型预测未来数据特征的一种方法。

主流的机器学习框架之一——TensorFlow



二、TensorFlow简介

TensorFlow 是一个采用计算图的形式表述数值计算的编程系统,本身是一个开源软件库。TensorFlow计算图中每一个节点表示一次数学计算,每一条边表示计算之间的依赖关系。


它最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。


张量(tensor)是计算图的基本数据结构,可以理解为多维数据,流(Flow)表达了张量之间通过计算互相转化的过程。


主流的机器学习框架有很多,除了TensorFlow外还有Caffe, CNTK等,而TensorFlow则是主流中的主流。

主流的机器学习框架之一——TensorFlow



三、TensorFlow的基本使用

使用张量(Tensor) 表示数据,通过变量 (Variable) 输入训练数据,维护状态;使用计算图(computational graph) 来表示计算任务,在会话 (Session) 的上下文 (Context) 中执行计算图。


张量(Tensor)是一个多维数组,是TensorFlow核心的基本数据单元。

Rank(张量的秩)就是张量的维数。直观上看就是有几层括号。


示例1:零阶张量即纯量 

s=256

一阶张量(可看作向量,用t[i]来访问其元素)

v=[1,1, 2.2, 3.3]

二阶张量(可看作矩阵, 用t[i,j]来访问其元素)

m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]


Shape(张量的形状)描述的是张量的形状 。逐步去掉中括号,看有多少个“元素”。


示例2:

[[1,2,3] , [4,5,6]]   和    [[1,2,3],
                                    [4,5,6]]

的shape是一样的,shape=[2, 3]


示例3:

[1,2,3]是1维的,但它作为shape时,代表要传入的数据必须是个三维的。


示例4:

[[[1., 2., 3.]], [[7., 8., 9.]]]  

 shape=(2, 1, 3)


计算图(computational graph)用“节点”(nodes)和“线”(edges)的有向图来描述数学计算的图像。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)

主流的机器学习框架之一——TensorFlow



会话(Session)囊括TensorFlow运行时候的状态,运行控制。构建的计算图必须在TensorFlow的session中才能运行


编程示例:


import tensorflow as tf
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0)
node3 = tf.add(node1,node2)
sess = tf.Session() #运行计算图之前创建session
print("node3:",node3)
print("sess.run(node3):",sess.run(node3)) #调用sess的'run()'方法来执行矩阵op


运行结果:


主流的机器学习框架之一——TensorFlow



placeholders 在计算图中,能够接受额外输入,通常情况下,提供的值晚于定义。

Variables 是在模型训练中,允许修改的量。相同的输入,通过修改变量得到不同输出值。在线性模型中用来描述权重和偏移量。


编程示例:


import tensorflow as tf
W = tf.Variable([0.3],dtype=tf.float32)
b = tf.Variable([-0.3],dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x + b
#变量必须显示申明,使用:
init = tf.global_variables_initializer() #初始化全局变量
sess = tf.Session()
sess.run(init)
print(sess.run(linear_model, {x: [1,2,3,4]}))


运行结果:


主流的机器学习框架之一——TensorFlow



四、安装TensorFlow

CPU&GPU 推荐使用GPU运行TensorFlow,因为GPU比CPU更适合张量的运算,效率成倍数提升。但是并不是每台设备都配备GPU,笔记本中只有一些游戏本是配备的GPU,因此游戏本的同学可以尝试安装GPU版本的TensorFlow。


没有GPU的设备可以使用CPU版本。对于初学者来说,面对不大的数据量,CPU版本的也足够了,更重要的是熟悉TensorFlow的原理。


编程基础 TensorFlow支持多种语言的,推荐使用python做为API,因为它代码简洁,容易上手,最重要的是能混合其他DL库一块使用。


接下来展示是的CPU版本的安装:


1

安装Anaconda以及TensorFlow


(1)官网下载安装包:Anaconda官网,安装

(2)检查是否安装成功:

conda –version


主流的机器学习框架之一——TensorFlow


(3)检查目前的安装环境:

conda info --envs


(4)检查目前有哪些版本的python可以安装:

conda search --full-name python


(5)选择一个python版本安装

       (这里选择python3.7.4版本):


conda create --name tensorflow python=3.7.4

主流的机器学习框架之一——TensorFlow


完成:


主流的机器学习框架之一——TensorFlow


2

测试TensorFlow是否安装成功


(1)通过开始菜单栏进入Anaconda Prompt(可以在anaconda的文件夹中找到)


(2)依次输入命令:

activate tensorflowpythonimport tensorflow as tf



没有报以下错误:


主流的机器学习框架之一——TensorFlow


则成功

如果出现了,可以参考一下这篇文章的处理方法https://blog.csdn.net/xiakejiang/article/details/82720815



五.TensorFlow机器学习例子——一元线性回归

回归方程

主流的机器学习框架之一——TensorFlow

梯度下降算法 利用计算机求极值,可以用梯度下降算法进行多次迭代,逼近极值点,求出w和 b。

目标 给出100个散点样本,求出回归方程

编程:


import tensorflow as tfimport numpy as np
#散点图数据,理论 w=2, b=10
train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10

 

构建计算图

#构建计算图
X = tf.placeholder(tf.float32, name="x")
Y = tf.placeholder(tf.float32, name="y")
w = tf.Variable(0.0, name="weight")
b = tf.Variable(0.0, name="bias")
loss = tf.square(Y - X * w - b) #损失函数为离差平方和
train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss) #梯度下降算法


运行计算图

#运行计算图
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())

for i in range(20): #20次迭代
for(x, y) in zip(train_X, train_Y):
train_op_result, w_result, b_result = sess.run([train_op, w, b],feed_dict={X: x, Y:y})
print("Epoch: {}, w: {}, b: {}".format(i+1, w_result, b_result))

运行结果:


主流的机器学习框架之一——TensorFlow




欢迎关注数据皮皮侠

本期编辑校对:李嘉楠


以上是关于主流的机器学习框架之一——TensorFlow的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow与主流深度学习框架对比

学习TF:《TensorFlow技术解析与实战》PDF+代码

机器学习-Tensorflow之Tensor和Dataset学习

TensorFlow实战-TensorFlow和其他深度学习框架的对比-第2章

基于Docker的TensorFlow机器学习框架搭建和实例源码解读

基于Docker的TensorFlow机器学习框架搭建和实例源码解读