如何将张量值分配给另一个函数的张量变量?

时间:2017-01-20 13:13:28

标签: python tensorflow variable-assignment

我正在计算一组数据中的一些功能。我为每个计算做了功能。我想将所有这些值放在另一个函数的数组中,我想调用该函数。怎么做?

我拥有的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

1 个答案:

答案 0 :(得分:4)

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)))