2017-01-20 256 views
0

我正在计算一组数据中的某些功能。我作为每个计算的函数。我想把所有这些值放在另一个函数的数组中,我想调用这个函数。怎么做 ?如何将张量值分配给另一个函数的张量变量?

的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 

回答

4

tf.assign只让你一个值分配给整个可变的,而不是给一个变量的一个切片。你将不得不使用tf.scatter_update来分配一个变量的切片。但是,对于您的情况,您可以简单地通过连接三个值来创建张量。这里是完整的工作程序:

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))) 
相关问题