2017-08-10 3 views
0

私は、テンソルフロー変数xといくつかの定数yを取得し、出力としてノードを返します。これは、それらの2つの方法に依存します。テンソルフローノードのベクトルを効率よく作成する

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はもっと複雑になる可能性があります。問題は、非常に長いy_vecに対してこれを効率的に行う方法です。

+1

もっと効率的にはどういう意味ですか? ['tf.sum_n'](https://www.tensorflow.org/api_docs/python/tf/add_n)ですべての追加を1つにまとめることができます。それは問題なのですか、それとも非常に多くの定数があり、それぞれのノードを作成したくないのですか?その場合は関数に依存しますが、おそらく何らかの放送操作や['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

関連する問題