1、系统框架
虽然Tensorflow的框架的版本不断的进行更新,但是系统架构并没有发生根本性的变化。它以不同的功能需求进行分层处理,以统一接口屏蔽具体实现,从而集中各自的关注层次,更好的提升Tensorflow的适用性,系统架构如下:
从上图可以明显的看出:Tensorflow系统框架分为三层,从上而下依次是应用层、接口层、核心层。
2、TensorFlow的系统的六个特性
TensorFlow的系统架构具有许多特性:
3、TensorFlow的编程特点
TensorFlow除了以数据流为核心外,在编程实现过程中还具备以下的两大特点:
下面是Python与TensorFlow的编程思路对比,来实现简单的一些计算:
在python中:
登录后复制
a=3
b=4
c=5
y=a*b+c
print(y)
则会输出结果:17
在TensorFlow中,我们也输入类似的代码:
登录后复制
import tensorflow as tf
a=3
b=4
c=5
y=tf.add(a*b,c)
print(y)
则会输出: Tensor(“Add:0”, shape=(), dtype=int32)
可以明显的看到,并没有输出运算的结果,而是输出了一个Tensor,这是因为我们仅仅完成了图的定义,而没有实现具体的运算。
下面我们就更改上述的代码,实现运算,就需要满足Tensorflow中计算的几个阶段,首先进行定义计算图,然后创建会话,最后则完成计算。
登录后复制
import tensorflow as tf
#创建图
a=tf.constant(3,tf.float32) #定义常量
b=tf.constant(4,tf.float32)
c=tf.constant(5,tf.float32)
y=tf.add(a*b,c) #定义计算公式
print(y)
sess=tf.Session() #创建会话
print(sess.run(y)) #计算
sess.close() #关闭会话
运行结果如下:
登录后复制
Tensor("Add:0", shape=(), dtype=float32)
17.0
可以看出,只有在会话中完成计算后才会输出计算结果17。
TensorFlow采用这样的设计主要因为他是针对机器学习的框架,消耗最多的是对输入数据的训练。
1、Tensor
Tensor是张量,是最基本的概念,也是TensorFlow中最主要的数据结构。张量用于在计算图中进行数据的传递,但是创建了一个张量后,不会立即在计算图中增加该张量,而需要将该张量赋值给一个变量或者占位符,之后才会将该张量增加到计算图中。
张量,可理解为一个 n 维矩阵,所有类型的数据,包括标量、矢量和矩阵等都是特殊类型的张量。
张量的生成方式有很多种,例如固定张量、相似张量、序列张量、分布张量等。
登录后复制
import tensorflow as tf
#Tensor
row=3.0
col=4.0
zero_tsr= tf.zeros([row,col]) #值为0,指定维度的张量
ones_tsr=tf.ones([row,col]) #值为1,指定维度的张量
filled_tsr=tf.fill([3,4],2.0) #指定填充数值2.0 ,指定维度的张量
constant_tsr=tf.constant([1,2,3]) #已知常数的张量
zeros_similar=tf.zeros_like(constant_tsr) #所有元素为0,与constant_tsr类型一致的张量
ones_similar=tf.ones_like(constant_tsr) #所有元素为1,与constant_tsr类型一致的张量
liner_tsr=tf.linspace(start=0.0,stop=2.0,num=3) #创建指定的区间,等间距的张量
integer_seq_str=tf.range(start=0,limit=5,delta=1) #创建指定的区域,间隔的张量
randunif_tsr=tf.random_uniform([3,4],minval=0,maxval=2)#创建均匀分布随机数的张量
randnorm_tsr=tf.random_normal([3,4],mean=0.0,stddev=1.0)#创建正态分布随机数的张量
runcnorm_tsr=tf.truncated_normal([3,4],mean=0.0,stddev=1.0)#创建指定边界的正态分布张量
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
#Tensor
print ('zero_tsr is ',sess.run(zero_tsr))
print ('ones_tsr is ',sess.run(ones_tsr))
print ('filled_tsr is ',sess.run(filled_tsr))
print ('constant_tsr is ',sess.run(constant_tsr))
print ('zeros_similar is ',sess.run(zeros_similar))
print ('ones_similar is ',sess.run(ones_similar))
print ('liner_tsr is ',sess.run(liner_tsr))
print ('integer_seq_str is ',sess.run(integer_seq_str))
print ('randunif_tsr is ',sess.run(randunif_tsr))
print ('randnorm_tsr is ',sess.run(randnorm_tsr))
print ('runcnorm_tsr is ',sess.run(runcnorm_tsr))
sess.close()
输出结果:
登录后复制
zero_tsr is [[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
ones_tsr is [[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
filled_tsr is [[2. 2. 2. 2.]
[2. 2. 2. 2.]
[2. 2. 2. 2.]]
constant_tsr is [1 2 3]
zeros_similar is [0 0 0]
ones_similar is [1 1 1]
liner_tsr is [0. 1. 2.]
integer_seq_str is [0 1 2 3 4]
randunif_tsr is [[0.92969847 0.7200849 1.4162304 1.2510674 ]
[0.97165823 1.45502 1.5120289 0.9996681 ]
[0.96171427 0.8367257 0.731313 1.85327 ]]
randnorm_tsr is [[-0.670491 1.5340202 0.47463468 -1.9473785 ]
[-1.1878501 -0.521639 0.10082857 -2.3056 ]
[ 0.51349676 0.6248353 0.53046846 0.24368662]]
runcnorm_tsr is [[ 1.1717324 -0.12139019 0.97365093 0.28850073]
[ 0.96101403 -0.46031672 -0.65009755 1.5967586 ]
[-1.8578918 0.15960255 -0.38491356 1.5632377 ]]
2、Variable
Variable即变量、一般用来表示图中的各个计算参数,包括矩阵和向量,他在计算图中有固定的位置。一般我们在TensorFlow中通过调整这些变量的状态来优化机器学习算法。
创建变量使用函数tf.Variable(),通过输入一个张量,返回一个变量。变量声明后需要进行初始化才能使用。通过打印张量和变量,可对比他们的不同之处。
登录后复制
import tensorflow as tf
tensor=tf.zeros([1,2])
m_var=tf.Variable(tensor)
init_op=tf.global_variables_initializer()
sess=tf.Session()
with tf.Session() as sess:
print("tensor is",sess.run(tensor))
sess.run(init_op)
print("m_var is",sess.run(m_var))
输出结果:
登录后复制
tensor is [[0. 0.]]
m_var is [[0. 0.]]
3、Placeholder
Tensorflow占位符,用于表示输入输出数据的格式,允许传入指定类型和形状的数据。占位符仅仅声明了数据位置,告诉系统这里有一个值、向量或者矩阵、现在还没法给出具体值。占位符通过会话的feed_dict参数获取数据,在计算图运行时使用获取的数据进相应的计算,计算完毕后获取的数据就会消失。
登录后复制
import tensorflow as tf
#placeholder
x=tf.placeholder(tf.float32)
y=tf.placeholder(tf.float32)
z=tf.add(x,y)
x_data=[1.0,2.0]
y_data=[10.0,11.0]
init_op = tf.global_variables_initializer()
sess = tf.Session()
with tf.Session() as sess:
print(sess.run( [z],feed_dict={x:x_data,y:y_data} ))
运行结果:
登录后复制
[array([11., 13.], dtype=float32)]
4、Session
Session是会话,是TensorFlow中计算图的具体执行者,与图进行实际的交互。一个会话中可以有多个图,会话的目的是将训练数据添加到图中进行训练,当然也可以进行修改图的结构。
下面进行介绍会话的两种使用方式:
登录后复制
sess=tf.Session()
sess.run()
sess.close() #调用sess.close(),释放资源。
登录后复制
with tf.Session() as sess:
sess.run()
5、Operation
Operation是操作。是Tensorflow图中的节点,它的输入与输出都是Tensor。它的作用是完成各种操作,包括运算操作、矩阵操作、和神经网络构建操作等。
介绍 | 主要的操作 |
数学运算 | Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal |
数组运算 | Concat, Slice, Split, Constant, Rank, Shape, Shuffle |
矩阵运算 | MatMul, MatrixInverse, MatrixDeterminant |
神经网络构建操作 | SoftMax, Sigmoid, ReLU, Convolution2D, MaxPool |
检查点操作 | Save, Restore |
队列和同步操作 | Enqueue, Dequeue, MutexAcquire, MutexRelease |
张量控制操作 | Merge, Switch, Enter, Leave, NextIteration |
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删