TensorFlow学习1-TensorFlow简介


在学习深度学习的时候,我们经常会听到TensorFlow的大名。那么TensorFlow是什么,是从哪里来的,干什么用的,怎么用。下面我们来一一回答这些问题。

TensorFlow是什么?

TensorFlow是一个深度学习的框架工具。它是一个工具,使用它,我们可以更好的进行深度学习的程序设计。TensorFlow是Google开发的用于研究超大规模的深度学习神经网络,对深度学习的各种算法都提供了比较友好的支撑(可以在TensorFlow中直接使用此类算法,而不需要用户重新再写这些算法),可以用于语音识别或者图像识别等领域。可以说,TensorFlow是谷歌公司给我们提供了一套做菜的程式和工具,在此基础上,我们可以结合自己的需要作出想要的美食。更多的TensorFlow信息可以参考官方网址 https://www.tensorflow.org/http://www.tensorfly.cn/

TensorFlow的编程策略

前面我们说到TensorFlow是一个框架,是一个工具。既然是工具,那么对工具的使用是有套路可寻的,或者说有使用说明书来告诉我们怎么用好这个工具。下面来学习一下TensorFlow的说明书。

我们知道,TensorFlow是用于深度学习神经网络的,而神经网络的学习需要大量的计算。在TensorFlow中,计算过程是一个计算图,与流程图类似。每一个运算操作是一个节点,每个节点可以有任意输入和输出,在网络形式上,是非常接近神经网络的样子。Tensor是张量的意思,是在计算图的边上流动的数据。

TensorFlow的计算模型

TensorFlow的的计算过程主要有三部。

  1. 设计计算图
    第一步设计计算图,就像画流程图一样,我们需要设计出深度学习中的计算图,即运算结构是如何,需要的是怎样的加减乘除,对应的数据流和流向是如何的。下面是一个加运算的计算图
import tensorflow as tf

a=tf.constant([1,2,3],name='a')
b=tf.constant([2,5,8],name='b')

result=a+b
print(result)

计算图示意
在这里,我们构建了一个加法的运算图。其中a和b是张量,result也是张量。这里仅仅是构建了图,并不执行实际运算。就像我们在做饭时候,厨房里有辣椒(如a)和鸡块(如b),同时也知道了炒菜的方法(如辣子鸡,如+),同时摆好了餐盘(result),但是我们还没有做成辣子鸡,我们仅仅是摆好了阵势,但是并没有开始炒。

  1. 定义会话
    当计算图构造完成后,我们通过定义会话来查看计算结果。
with tf.Session as sess:
     pass

接着做菜的例子说,做菜小能手就要撸撸袖子开始干了。实际开始做的时候,那么我们认为小能手占据了厨房,是一个session。
3. 运行计算
有了原材料,有了环境,之后就真刀实枪的开始干了,到了出结果的时候了。这里用sess.run(result),来表示开始运行(炒菜并装盘。)
因此,通过三步走完成了TensorFlow的实际使用。完整的代码如下:

import tensorflow as tf

a=tf.constant([1,2,3],name='a')
b=tf.constant([2,5,8],name='b')

result=a+b

with tf.Session() as sess:
    print(sess.run(result))

运算结果是

[ 3  7 11]

TensorFlow的数据模型

如果说计算图示TensorFlow的计算模型,那么张量Tensor则是数据模型,张量是TensorFlow管理数据的形式。在TensorFlow中,所有的数据都可以通过张量的形式来表示。

张量可以理解成不同维度的数组。零阶张量是标量,也就是一个数;一阶张量是向量;二阶张量是矩阵;以此类推。需要注意的是张量保存的是数据的属性,而不是数值。张量具有三个属性:1,操作。2,维度。3,数据类型。其中操作和计算图的节点有关系。维度就是张量的维数。数据类型是张量对应的数据类型。

TensorFlow的运算模型

TensorFlow系统结构分为前端和后端。前端负责提供编程模型,构建计算图。后端提供运行环境,负责执行计算同,同时支持分布式计算。
在实际操作中,正如前面所说,有三个步骤,1、构建计算图,通过构建张量和运算节点来实现,并进行数据初始化。2、定义会话。3、计算图运行。

TensorFlow的安装和实例

网上有很多关于TensorFlow的安装文章和资料,这里不再赘述。下面通过几个简单的例子看看看如何使用TensorFlow,在看实例之前,我们需要牢记TensorFlow操作的三个步骤,即建图赋值,定义会话,计算图运行。

  1. 计算两个2*3矩阵的加法,即A+B,其中A是全1矩阵,B的随机产生的一个矩阵。
    根据三个步骤下面依次分析:
    第一步建图赋值,先把A和B表示出来,其中B用到了TensorFlow的变量声明函数Variable()。
import tensorflow as tf
A = tf.ones([2,3])
B = tf.Variable(tf.random_normal([2, 3], stddev=0.35),name="B")

第二步定义会话,其中,变量需要赋值,所有的运算操作都在Session中进行run。
第三步计算图运行。
因此代码如下:

A=tf.ones([2,3])
B = tf.Variable(tf.random_normal([2, 3], stddev=0.35),name="B")

result=A+B

with tf.Session() as sess:
    print('**************')
    print(sess.run(B.initializer)) #初始化B
    print('----------------------')
    print(sess.run(result))

另外可以使用initialize_all_variables()函数来初始化所有变量,就不需要对变量逐个初始化。代码如下:

import tensorflow as tf
A=tf.ones([2,3])
B = tf.Variable(tf.random_normal([2, 3], stddev=0.35),name="B")

result=A+B

op=tf.initialize_all_variables() #初始化所有变量

with tf.Session() as sess:
    print('**************')
    sess.run(op)
    print('----------------------')
    print(sess.run(result))
  1. 采用占位placeholder机制来为会话运行中动态提供输入数据。placeholder(dtype,shape,name)相当于为张量占了一个位置或者内存空间,具体的数据赋值可以在运行中实现。同样的,我们仍然以计算两个2*3矩阵的加法为例。
import tensorflow as tf
import numpy as np
A=tf.placeholder(tf.float32,shape=(2,3),name='A')
B=tf.placeholder(tf.float32,shape=(2,3),name='B') #占两个(2,3)的张量位置
input1=np.random.random((2,3))
input2=np.random.random((2,3))                    #产生两个随机的(2,3)矩阵
print(input1)
print(input2)
print('------------------------------')
print(input1+input2)
result=A+B
with tf.Session() as sess:
    AaddB=sess.run(result,feed_dict={A:input1,B:input2})    #在字典中给出每个用到的placeholder的取值
    print('-----------------')
    print(AaddB)
[[0.8220202  0.15559222 0.18267369]
 [0.34102596 0.12183    0.44073277]]
[[0.75545978 0.48099172 0.7880773 ]
 [0.52183775 0.3582586  0.08766639]]
------------------------------
[[1.57747997 0.63658394 0.97075099]
 [0.86286372 0.4800886  0.52839916]]
2019-10-14 21:03:07.701364: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
-----------------
[[1.57748    0.6365839  0.970751  ]
 [0.8628637  0.4800886  0.52839917]]

从结果中我们看到运行正确。

总结

本文介绍了TensorFlow的基本概念,基本原理和编程基本步骤,并给出了两个简单例子。TensorFlow其实就是一个框架性工具,只要我们能好好看工具的说明书,掌握其操作套路,就一定能使用好这个工具。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值