tensorflow的运行机制属于“定义”与“运行”相分离,tensorflow定义的内容都在“图”这个容器中完成,关于图有几点需要理解的。 1、一个“图”代表一个计算任务 2、在模型运行的环节
- tensorflow的运行机制属于“定义”与“运行”相分离,tensorflow定义的内容都在“图”这个容器中完成,关于图有几点需要理解的。
1、一个“图”代表一个计算任务
2、在模型运行的环节中,“图”在会话(session)里被启动
3、session将图的节点操作发布到CPU GPU上,同时提供OP的方法
- 也就是说在tensorflow中定义的时候,其实就只是定义了图,图是静态的,在定义完成之后是不会运行的
- MO平台运行(例子):
import os
#忽略日志级别2以下的日志
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
#以上代码用于忽略级别 2 及以下的消息(级别 1 是提示,级别 2 是警告,级别 3 是错误)。
def init_Check():
#创建temsor的持久化常量
messsage = tf.constant("runing~")
#使用with简化关流
with tf.Session() as sess:
#这里输出的是字节字符串,要删除字符串引号和“b”(表示字节,byte)只保留单引号内的内容,可以使用 decode() 方法
print(sess.run(messsage).decode("UTF-8"))
if __name__ == "__main__":
init_Check()
- 计算图:是包含节点和边的网络。本节定义所有要使用的数据,也就是张量(tensor)对象(常量、变量和占位符),同时定义要执行的所有计算,即运算操作对象(Operation Object,简称 OP)。
- 每个节点可以有零个或多个输入,但只有一个输出。网络中的节点表示对象(张量和运算操作),边表示运算操作之间流动的张量。计算图定义神经网络的蓝图,但其中的张量还没有相关的数值。
- 为了构建计算图,需要定义所有要执行的常量、变量和运算操作。
- 例如两个向量相加的计算图:
- demo1:
#定义图的片段
v_1 = tf.constant([1,2,3,4,5])
v_2 = tf.constant([5,4,3,2,1])
v_all= tf.add(v_1, v_2)
with tf.Session() as sess:
print(sess.run(v_all))
if __name__ == "__main__":
#会话运行图
v_add()
- 使用with无需手动关闭会话,隐式关闭
- demo2:
# tf.InteractiveSession 将比 tf.Session 更方便。InteractiveSession 使自己成为默认会话,需要关闭会话
sess = tf.InteractiveSession()
v_1 = tf.constant([1,2,3,4,5])
v_2 = tf.constant([5,4,3,2,1])
d = tf.add(v_1, v_2)
print(d.eval())
sess.close()
if __name__ == "__main__":
v_add_InteractiveSession()
- 使用InteractiveSession创建的默认会话,需要关闭会话,但是比Session方便
常量、变量以及占位符
Tensorflow常见的支持的数据类型:
- 张量,可理解为一个 n 维矩阵,所有类型的数据,包括标量、矢量和矩阵等都是特殊类型的张量。
TensorFlow 支持以下三种类型的张量:
常量:
- 声明一个标量常量:
- 一个形如 [1,3] 的常量向量可以用如下代码声明:
- 要创建一个所有元素为零的张量,可以使用 tf.zeros() 函数。这个语句可以创建一个形如 [M,N] 的零元素矩阵,数据类型(dtype)可以是 int32、float32 等:
- 例如:
- 还可以创建与现有 Numpy 数组或张量常量具有相同形状的张量常量:
sess = tf.InteractiveSession()
#生成初始值为1的矩阵,或者初始为0的矩阵
Matrix1 = tf.ones([9,9], tf.int32)
Matrix4 = tf.zeros([18,18], tf.int32)
#克隆shape相同的1或0的矩阵
Matrix2 = tf.ones_like(Matrix1)
Matrix3 = tf.zeros_like(Matrix2)
print(sess.run(Matrix1))
print(sess.run(Matrix2))
print(sess.run(Matrix3))
print(sess.run(Matrix4))
sess.close()
if __name__ == "__main__":
Matrix_likeMatrix()
- 在一定范围内生成一个从初值到终值等差排布的序列:相应的值为 (stop-start)/(num-1)。例如:
#num设置步长
#range_t = tf.linspace(2.0,5.0,5)#We get:[2. 2.75 3.5 4.25 5.]
- 从开始(默认值=0)生成一个数字序列,增量为 delta(默认值=1),直到终值(但不包括终值):下面给出实例:
- 例子:
#只有一个参数的时候表示以1为增量,从0到n,两个参数的时候表示m~n,增量为1,三个参数最后一个表示增量
num_se = tf.range(10,50,4)
with tf.Session() as sess:
print(sess.run(num_se))
if __name__ == "__main__":
Number_sequence()