1.Tensorflow的运行方式
Tensorflow作为谷歌开源的深度学习框架,受到众多的人工智能开发人员欢迎。Tensorflow的数据控制单元,张量Tensor是一个可以定义为任意维度的数据,张量的阶Tensor’s rank就是张量的维度,例如:
零阶张量: 1 一个标量
一阶张量: [1,2,3] 一个向量 shape 3
二阶张量: [[1,2,3],[4,5,6]] 一个矩阵 shape 2x3
三阶张量: [[[1,2,3]],[[4,5,6]]] shape:2x1x3
Tensorflow的编程主要分为两步,第一步构造计算图(computational Graph),第二步运行计算图。那么计算图是什么呢?
计算图是一系列由计算操作抽象出来的节点构成的结构,张量(Tensor)在这些节点之间流动运行,由此称该框架为Tensorflow。接下来我们就来介绍一下Tensorflow的基本概念
2.Constant常量
要使用Tensorflow我们首先需要导入该框架
import tensorflow as tf
Tensorflow中一个基础的节点类型就是constant,常量节点
node_A = tf.constant(10,tf.float32)
node_B = tf.constant(11,tf.int32)
所有的常量类型在定义时,就已经赋予了数值,而且其数值在后面的运行中是无法改变的。
3.Session会话
如果我们直接输出上面定义的两个节点时,例如
print(node_A,node_B)
我们会得到下面的结果
Tensor("Const:0", shape=(), dtype=float32)
Tensor("Const_1:0", shape=(), dtype=float32)
这里输出的并不是我们想要的10和11,想要输出运行一个节点的结果,必须在一个会话Session中运行计算图,Tensor flow中的session很好的封装了其运行时的状态和控制,接下来我们定义一个会话,输出两个节点的值
sess = tf.Session()
a,b = sess.run([node_A,node_B])
print(a,b)
输出如下:
10.0 11.0
4.Op计算节点
上面我们定义了两个常量节点和会话,并输出了节点的值,我们可以通过定义一些计算操作(Operation、Op)节点,构建更加复杂的计算
加法:
node_C = tf.add(node_A,node_B)
print(sess.run(node_C))
输出为
21.0
乘法:
node_D = tf.multiply(node_A,node_B)
print(sess.run(node_D))
输出为
110.0
5.Placehoder占位符
上面我们已经熟悉了常量类型以及一些运输符号的操作,Tensorflow的计算图还可以使用占位符placeholder参数化的从外部输入数据,简单来说placehold的作用就是给之后输入的值提前占位,设置这个结构的存在。
# 这里是构造计算图的部分
a=tf.placeholder(tf.float32)
b=tf.placeholder(tf.float32)
adder_node=a+b
#运行计算图
print("adder_node:",adder_node)
print(sess.run(adder_node,{a:3,b:4.5}))
print(sess.run(adder_node,{a:[1,3],b:[2,4]}))
输出结果为:
adder_node: Tensor("add:0", dtype=float32)
7.5
[ 3. 7.]
在我们构建一个神经网络时,通常会为网络的输入输出构建一个placeholder占位符
6.Variable变量
在网络模型中,我们不光有常量类型,计算操作、输入输出占位符等更多的是大量的变量类型,模型具有可训练能力,需要在一次次训练中修正计算图,使对于同样的输入得到新的输出。变量variable允许我们为计算图添加可变的训练参数
例如,我们构造一个线性模型
定义图结构
W=tf.Variable([.3],tf.float32)
b=tf.Variable([-.3],tf.float32)
x=tf.placeholder(tf.float32)
linear_model=W*x+b
运行计算图
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(linear_model,{x:[1,2,3,4]}))
这里的初始化是必要的,与常量类型的定义不同,所有的变量类型在定义时都不会赋予初始值,只有在执行初始化操作时,值才会被赋予变量
上述代码的输出为:
[ 0. 0.30000001 0.60000002 0.90000004]
到这里我们就讲完了tensorflow的一些基本概念,想要熟练掌握,还需要使用这些基础工具慢慢搭建出自己的网络,我的另一篇博客中描述了如何将一个大规模的数据集导入tensorflow
DeepLearning | Batch Generator:Tensorflow的大规模数据集导入
7.更多资源下载
微信搜索“老和山算法指南”获取更多下载链接与技术交流群
有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。