美文网首页
20201017-Tensoflow-1

20201017-Tensoflow-1

作者: 野山羊骑士 | 来源:发表于2020-10-17 14:04 被阅读0次

    Tensoflow

    全部基于Tensorflow=1.14.0

    Tensorflow的编程模式:声明式编程,告诉计算机想要达到的目标,不指定具体的实现步骤,而是通过函数、推论规则等描述数据之间的关系,优化较容易。包括人工智能、深度学习的编程框架都是声明式编程。

    历史

    Tensorflow是谷歌团队于2015年开发并开源,Github上活跃度最高的深度学习编程框架。谷歌第一代分布式深度学习平台叫做DistBelief,2011年完成,是第一代可扩展的分布式深度学习平台,可用于深度神经网络的训练和预测。作为Distblelief的继任者,谷歌团队开发并在2015年11月开源了深度学习框架Tensorflow,支持多种高级语言Python、C、Java、Go等。16年的0.8版本开始支持GPU分布式计算。2017年第一个正式版本。2018年推出Tensorboard。

    几个基本概念

    1、使用计算图来表示机器学习算法中所有的计算和状态。
    2、将所有的数据建模成张量tensor。
    3、具体计算操作运行在Session会话环境中。
    4、将多种类型的计算定义为操作Operation。
    5、通过变量Variable存储计算图中的有状态参数,如模型参数。
    6、通过占位符placehold将张量传递到会话中。
    7、通过队列Queue处理数据读取和计算图的异步执行。

    计算图

    Tensorflow中使用有向图来描述计算过程。有向图中包含一组节点和边。

    支持通过多种高级语言来构建计算图,包括C、python等

    计算图对应了神经网络的结构

    # 简单示例
    # 构建计算图  执行计算图
    import tensorflow as tf
                                  # 操作可绑定设备,GPU
    x = tf.constant([[3.,3.]])    #操作1
    w = tf.constant([[2.],[2.]])  #操作2
    
    y = tf.matmul(x,w)            #操作3
    
    with tf.Session() as sess:
        result = sess.run(y)
        print(result)
    
    [[12.]]
    

    Tensorflow 1.x

    静态图,方便对整个计算图做全局优化,性能较高;但调试困难,影响开发效率。

    Thensorflow 2.X

    动态图,调试简单,更适合快速开发;但运行效率低于静态图方法。

    # tensor属性
    import tensorflow as tf
    
    t0 = tf.constant(9,dtype=tf.int32)
    # 创建一个0阶整型常量
    
    t1 = tf.constant([3.,4.1,5.3],dtype=tf.float32)
    # 创建一个1阶浮点数数组
    
    t2 = tf.constant([['apple','pear'],['potato','tomato']],dtype=tf.string)
    # 创建一个2X2的字符串数组
    
    t3 = tf.constant([[[2],[2],[1]],[[7],[3],[3]]])
    # 创建一个2X3X1的3阶整型数组
    
    print(t0)
    print(t1)
    print(t2)
    print(t3)
    
    Tensor("Const_4:0", shape=(), dtype=int32)
    Tensor("Const_5:0", shape=(3,), dtype=float32)
    Tensor("Const_6:0", shape=(2, 2), dtype=string)
    Tensor("Const_7:0", shape=(2, 3, 1), dtype=int32)
    
    # print想要打印tensor具体的属性,而不是打印tensor的值
    # 查看tensor,需要session run
    
    with tf.Session() as sess:
        print(sess.run(t3))
    
    [[[2]
      [2]
      [1]]
    
     [[7]
      [3]
      [3]]]
    

    变量

    大多数计算图被执行多次,每次执行后其中的值即被释放。
    变量(Variable)是计算图中的一种有状态节点,用于在多次执行同一种计算图时存储并更新指定参数,对应了机器学习或深度学习算法中的参数
    作为有状态节点,其输出由输入、节点操作、节点内部已保存的状态值共同作用。

    创建变量后还需要进行变量初始化。最简单的变量初始化方法:使用tf.global_variables_initializer()对所有变量初始化

    # 创建变量
    # 方法1:使用tf.Variable函数直接定义
    a = tf.Variable(2,tf.int16)
    b = tf.Variable([1,2])
    
    # 方法2:使用Tensorflow内置的函数来定义变量初值,可以是常量或随机值
    r = tf.Variable(tf.random_normal([20,40],stddev=0.35)) # 以标准差0.35的正态分布初始化一个形状为【20,40】的变量
    z = tf.Variable(tf.zeros([2,3]))
    
    # 方法3:用其他变量的初始值来定义新变量
    weights = tf.Variable(tf.random_normal([784,200],stddev=0.35),name='weights') # 创建一个随机变量
    w2 = tf.Variable(weights.initialized_value(),name='w2')
    w_twice = tf.Variable(weights.initialized()*2,name='w_twice')
    
    import tensorflow as tf
    
    a = tf.Variable(tf.constant(0.0),dtype=tf.float32)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        
    
    

    总结

    计算图:对应神经网络结构

    操作:对应神经网络具体计算

    张量:对应神经网络的数据

    会话:执行神经网络真正的训练和预测

    变量:对应神经网络参数

    占位符:对应神经网络的训练或预测输入

    队列:对应神经网络训练样本的多线程并行处理

    相关文章

      网友评论

          本文标题:20201017-Tensoflow-1

          本文链接:https://www.haomeiwen.com/subject/oyaxmktx.html