TensorFlow入门知识

浅浅的花香味﹌ 2022-04-04 05:30 352阅读 0赞

-————-欢迎加入学习交流QQ群:657341423

安装TensorFlow

Windows安装TensorFlow可以下载TensorFlow安装包,下载链接。安装包下载后,在CMD窗口下使用pip安装即可

TensorFlow安装成功后,我们介绍TensorFlow的相关概念,它分为三部分:计算模型、数据模型和运行模型。

计算模型-计算图

Tensorflow是一个通过计算图的形式来表述计算的编程系统,计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。
在这里插入图片描述

在TensorFlow程序中,系统会维护一个默认的计算图,通过tf.get_default_graph()函数可以获取当前默认的计算图:

  1. import tensorflow as tf
  2. a = tf.constant([1.0, 2.0], name='a')
  3. b = tf.constant([2.0, 3.0], name='b')
  4. print(a)
  5. print(a.graph == tf.get_default_graph())
  6. # 输出
  7. Tensor("a:0", shape=(2,), dtype=float32)
  8. True

tf.constant代表定义一个计算节点,如果该节点没有指定某个计算图,则默认放在TensorFlow的默认计算图,即tf.get_default_graph()函数所得的计算图。
除了默认计算图之外,TensorFlow支持创建新的计算图,不同计算图的资源不会共享,自定义计算图如下:

  1. import tensorflow as tf
  2. g1 = tf.Graph()
  3. with g1.as_default():
  4. # 在计算图g1里定义tf的变量
  5. v = tf.get_variable(
  6. 'v',shape=[1],initializer=tf.zeros_initializer
  7. )
  8. # 读取计算图g1的变量v
  9. with tf.Session(graph=g1) as sess:
  10. tf.global_variables_initializer().run()
  11. with tf.variable_scope('',reuse=True):
  12. print(sess.run(tf.get_variable('v')))

TensorFlow的变量和计算是两个不同的概念,在此需要区分清楚。计算图Graph通过tf.Graph.device()函数来制定运行计算图的设备, 下图定义的程序可以将加法计算跑在GPU上:

  1. g = tf.Graph()
  2. # 指定计算运行的设备
  3. with g.device('/gpu:0'):
  4. result = a + b

此外,在一个计算图中,可以集合来管理不同类别的资源,通过tf.add_to_collection()函数将资源加入一个collection中,然后通过tf.get_collection获取一个集合里面的所有资源。资源可以指变量、运算节点(张量)等TensorFlow所需的资源。常用的集合列表如下:
在这里插入图片描述

数据模型-张量

上面讲述了 tf.constant代表定义一个计算节点,定义方式如下:

  1. import tensorflow as tf
  2. a = tf.constant([1.0, 2.0], name='a')
  3. print(a)
  4. # 输出
  5. Tensor("a:0", shape=(2,), dtype=float32)

准确地来说,计算节点就是一个张量,当输出a的时候,其结构是张量的结构,输出内容包含三个属性:名字、维度和类型。

  • 名字是张量的标识符,如“a:0”,a为计算图里面节点的名称,0代表该节点输出的一个结果,一个节点可能会有多个输出结果。
  • 维度描述张量的数据属性,如(2,),代表一个一维数组,数组长度为2。如a = tf.constant([[1.0, 2.0],[1.0, 2.0],[1.0, 2.0]], name='a'),输出Tensor("a:0", shape=(3, 2), dtype=float32),这是二维数组,长度为3。
  • 类型是数据类型,如字符串、布尔型、整型等。如果在运算的时候,如果张量的数据类型不一致,会提示报错。如:

    import tensorflow as tf
    a = tf.constant([[1.0],[1.0],[1.0]], name=’a’)
    b = tf.constant([[1],[1],[1]], name=’b’)
    print(a+b)

    输出

    TypeError: Input ‘y’ of ‘Add’ Op has type int32 that does not match type float32 of argument ‘x’.

运行模型-会话

会话拥有并管理TensorFlow程序运行时的所有资源,张量只不过是定义计算方式,如果要让计算方式运行,需要TensorFlow的会话来执行。使用如下:

  1. import tensorflow as tf
  2. a = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='a')
  3. b = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='b')
  4. sess = tf.Session()
  5. result = sess.run(a+b)
  6. print(result)
  7. sess.close()
  8. # 输出
  9. [[2. 4.]
  10. [2. 4.]
  11. [2. 4.]]

由于[1.0,2]的1.0和2是不同的数据类型,前者是浮点型,后者是整型,因此TensorFlow将计算结果皆以浮点型表示。除了这种方式,还可以使用python的with模块实现,这样不用调用sess.close()关闭会话。
我们知道张量和变量是存在于计算图里,不同的计算图需要创建相应的会话执行,在创建会话的时候,若无指定的计算图,则在默认的计算图里创建会话。如下所示:

  1. import tensorflow as tf
  2. # 定义g1计算图
  3. g1 = tf.Graph()
  4. with g1.as_default():
  5. a = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='a')
  6. b = tf.constant([[1.0,2],[1.0,2],[1.0,2]], name='b')
  7. # 在g1计算图里创建会话
  8. with tf.Session(graph=g1) as sess:
  9. # 下面的两者均可计算a+b
  10. print((a+b).eval())
  11. print(sess.run(a+b))
  12. # 输出:
  13. # 第一次print
  14. [[2. 4.]
  15. [2. 4.]
  16. [2. 4.]]
  17. # 第二次print
  18. [[2. 4.]
  19. [2. 4.]
  20. [2. 4.]]

在创建会话的时候,我们可以通过ConfigProto来设置会话,如下所示:

  1. import tensorflow as tf
  2. config = tf.ConfigProto(allow_soft_placement=True,
  3. log_device_placement=True, )
  4. c = tf.constant([[1.0, 2], [1.0, 2], [1.0, 2]], name='c')
  5. d = tf.constant([[1.0, 2], [1.0, 2], [1.0, 2]], name='d')
  6. with tf.Session(config=config) as sess:
  7. # 下面的两者均可计算c+d
  8. print((c + d).eval())
  9. print(sess.run(c + d))

allow_soft_placement是将GPU的运算放到CPU上运算。 log_device_placement是设置日志功能。

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Tensorflow入门

    目录 Tensorflow入门 介绍 安装 基本概念 示例:线性回归 结论 Tensorflow入门:实例代码 场景介绍 代码示例 ------------

    相关 tensorflow入门

    数值计算表示为计算图, TensorFlow的程序主干是一个图, 图节点是操作(代码中操作),有多个输入和一个输出 节点间的边表示之间流动的张量(tensors),比如n