Advertisement

tensorflow相关概念

阅读量:

数据的基本形式

  • 标量:数值形式
  • 向量:一维标量
  • 矩阵:二维标量
  • 张量:多维标量

1.什么是tensorflow?

  • tensorflow是一种表达抽象计算(如计算图)的框架系统;
    • tensor即为一种多维数组(称为张量);
    • flow在数据流模型中指的是运算节点之间传递数值;
    • tensorflow通过定义使得张量沿着图从一端流向另一端。

2.为什么要使用tensorflow?

  1. 网络训练过程:在训练过程中需持续输入多批次的新数据以驱动网络运算。具体而言,在每次迭代中都需要将新数据送入网络并获取其输出结果。随后通过代价函数评估输出与预期结果之间的误差,并对模型参数进行梯度计算以实现参数更新。
  2. 问题:①面对海量数据时系统性能面临挑战;②算法设计需应对频繁进行梯度计算的需求。
  3. tensorflow优点:①通过分布式计算框架有效扩展处理能力以应对大规模数据问题;②利用张量操作库自动生成梯度计算从而简化复杂微分推导过程。
  4. 其他优点:①以图结构为基础,在GPU加速下提升运行效率并保证快速部署能力;②优化代码编译流程进而提高系统运行效率;③提供模型架构图和拓扑结构展示功能帮助开发者更好地理解模型运行机制;④支持多种硬件设备协同工作确保资源利用率最大化。

3.基本结构

(1)可以通过tensor、variable、operation等构造计算图;

(2)一个Session可以包含多个计算图;

4.基本概念

(1)计算图

一种全局数据结构,表示为有向图的形式,用于捕获有关计算的指令;

tf.Tensor对象:指向刚刚建立的节点的指针;

说明:计算图仅仅包含计算的步骤,不包含结果;

(2)会话

这个设计引入了一个指向全局图的特殊指针。此指针可指向所有节点,并且其值可随时更改。因此,在任何时间点上都可以根据需要动态地添加或移除相关连接项。

作用:处理内存分配和优化,使得计算图指定的任务可以执行;

使用:sess.run(node)或sess.run([node1,node2...])

复制代码
 # 在实验中同时完成多个操作,减少系统开销

    
 result,num1 = sess.run([sum1,num1])

尽量在一次中完成多个项目,避免重复调用,减少系统开销;

复制代码
  
    
 # coding=utf-8
    
 # Session的两种启动方式(推荐方式1)
    
 import tensorflow as tf
    
 num1 = tf.constant(3)  # 变量3
    
 num2 = tf.constant(2)  # 变量2
    
 sum1 = tf.add(num1,num2)  # 两数相加
    
 print(sum1)  # Tensor("Add:0", shape=(), dtype=int32)
    
  
    
 # 方式1
    
 with tf.Session() as sess:
    
     result = sess.run(sum1)
    
     print(result)
    
 # 结果:5
    
  
    
 # 方式2
    
 sess = tf.Session()
    
 result = sess.run(sum1)
    
 print(result)
    
 sess.close()

(3)占位符 与feed

占位符:是一种用于接受外部输入的节点;

使用:session.run(node, feed_dict={name: value});其中data_input采用字典格式表示;而value参数可接受数值类型或numpy.ndarray对象。

复制代码
 # coding=utf-8

    
 #feed:实现值传入,并计算结果
    
 import tensorflow as tf
    
 #创建占位符
    
 input1 = tf.placeholder(tf.float64)
    
 input2 = tf.placeholder(tf.float64)
    
 #两数相乘
    
 result = tf.multiply(input1,input2)
    
 with tf.Session() as sess:
    
     #feed的数据以字典的形式传入
    
     print(sess.run(result,feed_dict={input1:[2.],input2:[7.]}))
    
 # 结果:[ 14.]

(4)计算路径

在基于图中其他节点的运算结果时,在使用sess.run()执行完其他节点的计算之后,在进行当前节点的运算。

仅仅通过必须的节点便可以自动进行计算;

(5)变量

  1. 变量创建:
复制代码
        1. #方式1

    
        2. op1 = tf.Variable([[3,3]],name='op1')
    
        3. #方式2
    
        4. v1 = tf.get_variable('v1', shape=[5], initializer=tf.constant_initializer())
  1. 变量的状态维持(tf.assign())
复制代码
        1. # coding=utf-8

    
        2. '''
    
        3. Variable实现计数器功能:通过循环和加法实现
    
        4. '''
    
        5. import tensorflow as tf
    
        6. #定义变量
    
        7. state = tf.Variable(0,name='counter')
    
        8. #定义常量
    
        9. count = tf.constant(1)
    
        10. #计算两数之和
    
        11. new_state = tf.add(state,count)
    
        12. #将计算值更新(将new_state的值赋值给state)
    
        13. update = tf.assign(state,new_state)
    
        14. #存在变量时需要初始化
    
        15. init = tf.initialize_all_variables()
    
        16. #Session启动计算任务
    
        17. with tf.Session() as sess:
    
        18.     sess.run(init)#Session初始化变量
    
        19.     for _ in range(3):
    
        20.         sess.run(update)
    
        21.         print(sess.run(state))
  1. 变量需要初始化
复制代码
        1. #方法1

    
        2. init = tf.global_variables_initializer()
    
        3. #方法2
    
        4. init = tf.initialize_all_variables()
复制代码

5.应用注意

(1)如何将计算表示成图

(2)Session启动图运算

(3)数据-->tensors

(4)使用Variable来保持状态信息

(5)数据的填充与获取

全部评论 (0)

还没有任何评论哟~