2

sumproductTheano で 2 つの配列の を計算したい。どちらの配列も共有変数として宣言されており、以前の計算の結果です。チュートリアルを読んで、スキャンを使用して「通常の」テンソル配列を使用して必要なものを計算する方法を見つけましたが、コードを共有配列に適合させようとすると、エラーメッセージが表示されTypeError: function() takes at least 1 argument (1 given)ました。(以下の最小限の実行コードの例を参照してください)

私のコードのどこに間違いがありますか? 私の誤解はどこにありますか?私はまた、私の問題を解決するための別のアプローチにもオープンです。

私の理解では、最初に配列を Numpy 配列に変換してから、それらを再び Theano に渡すのは無駄になるため、通常、共有変数を直接受け取るバージョンを好みます。

共有変数sumproductを使用してコードを生成するエラー メッセージ:

import theano
import theano.tensor as T
import numpy

a1 = [1,2,4]
a2 = [3,4,5]

Ta1_shared = theano.shared(numpy.array(a1))
Ta2_shared = theano.shared(numpy.array(a2))

outputs_info = T.as_tensor_variable(numpy.asarray(0, 'float64'))

Tsumprod_result, updates = theano.scan(fn=lambda Ta1_shared, Ta2_shared, prior_value: 
                                       prior_value + Ta1_shared * Ta2_shared,
                                       outputs_info=outputs_info,
                                       sequences=[Ta1_shared, Ta2_shared])
Tsumprod_result = Tsumprod_result[-1]

Tsumprod = theano.function(outputs=Tsumprod_result)
print Tsumprod()

エラーメッセージ:

TypeError: function() takes at least 1 argument (1 given)

非共有変数を使用した作業sumproductコード:

import theano
import theano.tensor as T
import numpy

a1 = [1, 2, 4]
a2 = [3, 4, 5]   

Ta1 = theano.tensor.vector("a1")
Ta2 = theano.tensor.vector("coefficients")
outputs_info = T.as_tensor_variable(numpy.asarray(0, 'float64'))

Tsumprod_result, updates = theano.scan(fn=lambda Ta1, Ta2, prior_value:
                                       prior_value + Ta1 * Ta2,
                                       outputs_info=outputs_info,
                                       sequences=[Ta1, Ta2])
Tsumprod_result = Tsumprod_result[-1]

Tsumprod = theano.function(inputs=[Ta1, Ta2], outputs=Tsumprod_result)
print Tsumprod(a1, a2)
4

1 に答える 1

7

コンパイル行を次のように変更する必要があります。

Tsumprod = theano.function([], outputs=Tsumprod_result)

theano.function() は常に入力のリストを必要とします。この場合のように、関数が 0 の入力を受け取る場合は、入力に空のリストを指定する必要があります。

于 2013-05-28T01:33:56.643 に答える