美文网首页
tensorflow中的op(操作)

tensorflow中的op(操作)

作者: 马尔代夫Maldives | 来源:发表于2019-07-07 17:36 被阅读0次

    tensorflow是一个“符号式编程框架”,所有的计算步骤(包括数据定义等等)都要在一个graph中事先定义好,然后通过session来执行这个graph(全部或部分),得到结果。关于graph和session的恩怨见:https://www.jianshu.com/p/b636de7c251a

    什么是op(操作)?

    所谓op就是operation,“操作”的意思。在tensorflow中op不仅包括加、减、乘、除等所有计算方式,同时也包括常量定义、变量定义、占位符定义等等。例如tf.constant(),tf.add(),tf.mul()等等都是op,都要通过session运行,才能得到结果,

    很多人会以为tf.Variable()也是op,其实不是。tensorflow里,一般,首字母大写的是类,而首字母小写的才是op。tf.Variable()就是一个类,不过它包含了各种op,比如你定义了x = tf.Variable([2, 3], name = 'vector'),那么x就具有如下op:
    x.initializer # 对x做初始化,即赋值为初始值[2, 3]
    x.value() # 获取x的值
    x.assign(...) # 赋值操作
    x.assign_add(...) # 加法操作

    一个特殊的op: tf.placeholder()
    placeholder,翻译过来就是“占位符”。其实它类似于函数里的自变量。比如z = x + y,那么x和y就可以定义成占位符。占位符,顾名思义,就这是占一个位子,平时不用关心它们的值,当你做运算的时候,你再把你的数据灌进去就行了。是不是和自变量很像?看下面的代码:

    # 以下在默认graph中定义op
    a = tf.placeholder(tf.float32, shape=[3]) # a是一个有三个元素的向量
    b = tf.constant([5, 5, 5], tf.float32)
    c = a + b
    # 以下定义session
    with tf.Session() as sess:
        print( sess.run(c, feed_dict = {a: [1, 2, 3]})) # 把[1, 2, 3]灌到a里去
    

    输出结果是[6, 7, 8]。上面代码中出现了feed_dict的概念,其实就是用[1, 2, 3]代替a的意思。相当于在本轮计算中,自变量a的取值为[1, 2, 3]。其实不仅仅是tf.placeholder才可以用feed_dict,很多op都可以。只要tf.Graph.is_feedable(tensor)返回值是True,那么这个tensor就可用用feed_dict来灌入数据。

    tf.constant()是直接定义在graph里的,它是graph的一部分,会随着graph一起加载。如果通过tf.constant()定义了一个维度很高的张量,那么graph占用的内存就会变大,加载也会变慢。而tf.placeholder就没有这个问题,所以如果数据维度很高的话,定义成tf.placeholder是更好的选择。
    感谢文章:https://www.cnblogs.com/jiaxblog/p/9054051.html

    相关文章

      网友评论

          本文标题:tensorflow中的op(操作)

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