当前位置 : 主页 > 编程语言 > python >

TensorFlow入门

来源:互联网 收集:自由互联 发布时间:2022-06-30
tensorflow的运行机制属于“定义”与“运行”相分离,tensorflow定义的内容都在“图”这个容器中完成,关于图有几点需要理解的。 1、一个“图”代表一个计算任务 2、在模型运行的环节
  • tensorflow的运行机制属于“定义”与“运行”相分离,tensorflow定义的内容都在“图”这个容器中完成,关于图有几点需要理解的。
    1、一个“图”代表一个计算任务
    2、在模型运行的环节中,“图”在会话(session)里被启动
    3、session将图的节点操作发布到CPU GPU上,同时提供OP的方法
  • 也就是说在tensorflow中定义的时候,其实就只是定义了图,图是静态的,在定义完成之后是不会运行的
**想让进行 图 中的节点操作,就需要使用运行函数 tf.Session.run,才能开始运行**

  • MO平台运行(例子):
import tensorflow as tf
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:
def v_add():
#定义图的片段
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:
def v_add_InteractiveSession():
# 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入门_占位符

Tensorflow常见的支持的数据类型:

TensorFlow入门_占位符_02

  • 张量,可理解为一个 n 维矩阵,所有类型的数据,包括标量、矢量和矩阵等都是特殊类型的张量。

TensorFlow 支持以下三种类型的张量:

  • 常量:常量是其值不能改变的张量。
  • 变量:当一个量在会话中的值需要更新时,使用变量来表示。例如,在神经网络中,权重需要在训练期间更新,可以通过将权重声明为变量来实现。变量在使用前需要被显示初始化。另外需要注意的是,常量存储在计算图的定义中,每次加载图时都会加载相关变量。换句话说,它们是占用内存的。另一方面,变量又是分开存储的。它们可以存储在参数服务器上。
  • 占位符:用于将值输入 TensorFlow 图中。它们可以和 feed_dict 一起使用来输入数据。在训练神经网络时,它们通常用于提供新的训练样本。在会话中运行计算图时,可以为占位符赋值。这样在构建一个计算图时不需要真正地输入数据。需要注意的是,占位符不包含任何数据,因此不需要初始化它们。
  • 常量:

    • 声明一个标量常量:
    t_1 = tf.constant(4)
    • 一个形如 [1,3] 的常量向量可以用如下代码声明:
    t_2 = tf.constant([4,3,2])
    • 要创建一个所有元素为零的张量,可以使用 tf.zeros() 函数。这个语句可以创建一个形如 [M,N] 的零元素矩阵,数据类型(dtype)可以是 int32、float32 等:
    tf.zeros([M,N],tf.dtype)
    • 例如:
    zero_t = tf.zeros([2,3],tf.int32)
    • 还可以创建与现有 Numpy 数组或张量常量具有相同形状的张量常量:
    def Matrix_likeMatrix():
    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)。例如:
    tf.linspace(start,stop,num)
    #num设置步长

    #range_t = tf.linspace(2.0,5.0,5)#We get:[2. 2.75 3.5 4.25 5.]

    • 从开始(默认值=0)生成一个数字序列,增量为 delta(默认值=1),直到终值(但不包括终值):下面给出实例:
    tf.range(start,limit,delta)
    • 例子:
    def Number_sequence():
    #只有一个参数的时候表示以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()
    上一篇:python的tensorflow基础
    下一篇:没有了
    网友评论