2017-08-10 61 views
0

可以說我在python中有以下功能,即獲得tensorflow變量x和一些常量y,並將其作爲輸出返回節點,這在某種程度上取決於這兩者。高效地創建tensorflow節點的向量

import tensorflow as tf 

x = tf.Variable(3.0) 
y = {"a" : 3, "b" : 1.0} 

def make_graph(x, y): 
    return y["a"] * x**2 + y["b"] 

我有一個像Y(y_vec)的常量列表和我想的功能應用到每個元素,然後計算這些節點的總和,是這樣的:

f = sum([ make_graph(x, y) for y in y_vec ]) 

然後我想要針對x優化f。當然,函數make_graph可能更復雜。問題是如何在很長時間內有效地做到這一點。

+1

你是什麼意思更有效?你可以用['tf.sum_n'](https://www.tensorflow.org/api_docs/python/tf/add_n)將所有附加組合成一個。是這個問題,還是你有很多常量,並且不想爲每個節點創建節點?在這種情況下,它將取決於函數,但它可能涉及一些廣播操作和['tf.reduce_sum'](https://www.tensorflow.org/api_docs/python/tf/reduce_sum)。 – jdehesa

+0

@jdehesa問題是,正如你所寫,我有大量的常量,不想爲每個常量創建節點。 –

回答

1

答案取決於您正在應用的功能。在你的例子中,你可以做這樣的事情:

import tensorflow as tf 

x = tf.Variable(3.0) 
y = {"a" : [3, 4, 5], "b" : [1.0, 2.0, 3.0]} 

def make_graph(x, y): 
    return tf.reduce_sum(y["a"] * x**2 + y["b"], axis=0) 

f = make_graph(x, y) 
+0

所以基本上我應該以這樣一種方式編寫函數,即所有操作都可以在矢量上而不是標量中調用? –

+0

@JosefOndrej準確地說,他們有時稱之爲「向量化」一個函數或表達式(雖然[vectorize'](https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html)) NumPy對於本質上是for循環的內容是一個方便的包裝,所以這個術語可能會引起誤解)。 – jdehesa