【问题标题】:How to assign tensor value in to another function's tensor variable?如何将张量值分配给另一个函数的张量变量?
【发布时间】:2017-01-20 13:13:27
【问题描述】:

我正在从一组数据中计算一些特征。我为每个计算制作了函数。我想将所有这些值放在另一个函数的数组中,并且我想调用该函数。怎么办?

我拥有的 3 个功能是

def peak_value(x):
    return tf.reduce_max(tf.abs(x))
def rootms(x):
    return tf.sqrt(tf.reduce_mean(tf.square(x)))
def meanofabs(x):
    return tf.reduce_mean(tf.abs(x))

我希望将这些值分配给函数内部的数组

def pooldata(x,size):
    pool = tf.zeros([1,size],tf.float32)
    # i want to 
    # assign pool[0] with peak_value(x)
    # assign pool[1] with rootms(x)
    # assign pool[2] with meanofabs(x)
    return pool

那我要调用函数

# define x, size
model = tf.intialize_all_variables()
sess = tf.Session()
sess.run(model)
print(sess.run(pooldata)) # print all the three values

我该怎么做?

我试过了

tf.assign(pool[0],peak_value(x)) 

但它给了我错误

TypeError: Input 'ref' of 'Assign' Op requires l-value input

【问题讨论】:

    标签: python tensorflow variable-assignment


    【解决方案1】:

    tf.assign 仅允许您将值分配给整个变量,而不是变量的一部分。您必须使用 tf.scatter_update 分配给变量的切片。但是,在您的情况下,您可以通过连接三个值来简单地创建 pool 张量。这是完整的工作程序:

    import tensorflow as tf
    
    def peak_value(x):
        return tf.reduce_max(tf.abs(x))
    def rootms(x):
        return tf.sqrt(tf.reduce_mean(tf.square(x)))
    def meanofabs(x):
        return tf.reduce_mean(tf.abs(x))
    
    
    def pooldata(x,size):
        pool = tf.concat_v2([tf.expand_dims(peak_value(x), 0),
                             tf.expand_dims(rootms(x), 0),
                             tf.expand_dims(meanofabs(x), 0)], axis=0)
        # i want to
        # assign pool[0] with peak_value(x)
        # assign pool[1] with rootms(x)
        # assign pool[2] with meanofabs(x)
        return pool
    
    sess = tf.Session()
    size = 1
    x = [1.0]
    
    print(sess.run(pooldata(x, size)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2021-08-13
      • 2018-07-02
      相关资源
      最近更新 更多