• tensorflow ops


    tensorflow 源码解析:https://github.com/horance-liu/tensorflow-internals
    https://raw.githubusercontent.com/horance-liu/tensorflow-internals/master/tensorflow-internals.pdf

    导数、偏导数、微分、梯度

    (1)导数
    导数(Derivative),是针对一元变量而言的,当函数y=f(x)的自变量x在一点x0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限。
    几何意义:导数描述了一个函数在某一点附近的变化率。当自变量和取值都是实数时为切线斜率。
    函数可导的充要条件:左导数和右导数都存在并且相等。

    (2)偏导数
    偏导数是针对多变量函数的,就是其关于其中一个变量的导数而保持其他变量的值不变。就是其在某一个变量方向上的变化率。

    (3)微分
    由函数B=f(A),得到A、B两个数集,在A中当dx靠近自己时,函数在dx处的极限叫作函数在dx处的微分,微分的中心思想是无穷分割。
    通常把自变量x的增量 Δx称为自变量的微分,记作dx,即dx = Δx。于是函数y = f(x)的微分又可记作dy = f’(x)dx。
    函数因变量的微分与自变量的微分之商等于该函数的导数。因此,导数也叫做微商。
    几何意义:当Δx很小时,切线纵坐标的增量。

    (4)梯度
    ,梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

    tf.control_dependencies()

    with tf.control_dependencies(control_inputs)
      exec_ops
    在执行某些 exec_ops 之前,control_inputs得首先被运行。
    但是对于 Variable 的 identity op 会在 control dependence 后重新计算,但其它 op 都不会重新计算。
    https://blog.csdn.net/u012436149/article/details/72084744

    x = tf.Variable(0.0)
    x_plus_1 = tf.assign_add(x, 1)
    
    with tf.control_dependencies([x_plus_1]):
        y = x
    
    init = tf.initialize_all_variables()
    with tf.Session() as session:
        init.run()
        for i in xrange(5):
            print(y.eval())
    

    print 0, 0, 0, 0, 0
    session 中没有 run 这和 x_plus_1 变量,所以 x_plus_1 不会被执行,虽然 control_dependencies 中依赖是 x_plus_1,但是并不会执行这个运算,而是确定被定义了。

    x = tf.Variable(0.0)
    x_plus_1 = tf.assign_add(x, 1)
    
    with tf.control_dependencies([x_plus_1]):
        y = tf.identity(x)
    
    init = tf.initialize_all_variables()
    with tf.Session() as session:
        init.run()
        for i in xrange(5):
            print(y.eval())
    

    prints 1, 2, 3, 4, 5

    b = tf.identity(a)

    返回一个tensor(b),这个tensor(b)的size和shape与输入tensor(a)是相同的。
    通常identity与Variable一起使用,并且identity去除了Variable的引用标识,同时也避免了内存拷贝。
    还可以用于CPU和GPU等不同设备之间的数据传输,以及与 control_dependencies 配合使用。

    tf.global_variables_initializer()

    变量初始化:https://www.jianshu.com/p/bebcdfb74fb1
    sess.run(tf.global_variables_initializer()) 所做的动作如下

    tf.assign()

    tf.assign(A, new_number): 这个函数的功能主要是把A的值变为new_number,即 C++ 的 A = new_number;

    NoOp

    NoOp,即不存在输入,也不存在输出,作用是:通过控制依赖边与该NoOp相连,保证相应的变量运行。
    如1:所有的全局变量的初始化器,就是一个NoOp,通过控制依赖边与该NoOp相连,保证所有的全局变量被初始化。
    如2:tf.control_dependencies() 中的控制变量也是一个NoOp,用于控制变量的依赖。

  • 相关阅读:
    android测试点汇总
    Java Web应用调优线程池
    大型网站架构技术一览
    如何用消息系统避免分布式事务
    VMware Tools安装
    Git
    构架分布式队列编程
    排序算法概述
    ThreadLocal使用和原理
    JVM常用参数配置
  • 原文地址:https://www.cnblogs.com/qccz123456/p/12752260.html
Copyright © 2020-2023  润新知