2017-01-20 241 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))) 
相關問題