2016-05-02 21 views
0

pythonの性質は、私がtheano関数を呼び出す方法の正式な定義を見つけるのは非常に困難です。長さ4と行列batchのリストを与えられたときTheano:Theano関数を呼び出すための引数

、私は

validationFunction(batch[0],batch[1],batch[2],batch[3]) 

呼び出し、これは動作します。

私は

validationFunction(batch) 

または

validationFunction((list(batch)) 

を呼び出すと、それは文句:

 validationError += validationFunction(batch) # [0],batch[1], batch[2], batch[3]) 
    File "/usr/lib64/python2.7/site-packages/theano/compile/function_module.py", line 786, in __call__ 
    allow_downcast=s.allow_downcast) 
    File "/usr/lib64/python2.7/site-packages/theano/tensor/type.py", line 149, in filter 
    converted_data = theano._asarray(data, self.dtype) 
    File "/usr/lib64/python2.7/site-packages/theano/misc/safe_asarray.py", line 33, in _asarray 
    rval = numpy.asarray(a, dtype=dtype, order=order) 
    File "/usr/lib64/python2.7/site-packages/numpy/core/numeric.py", line 474, in asarray 
    return array(a, dtype, copy=False, order=order) 
ValueError: ('Bad input argument to theano function with name "dummy.py:96" at index 0(0-based)', 'could not broadcast input array from shape (7,3) into shape (7)') 

私はシンボリック入力変数とminibatchesの対応するリストのリストを持っています。バッチは次の形式になります: print( "batch singular = \ n0:{} \ n1:{} \ n2:{} \ n3:{}" ]、バッチ[3]))

0:[[3.0 3.0 2.0] 
[3.0 2.0 5.0] 
[2.0 5.0 3.0] 
[5.0 3.0 4.0] 
[3.0 4.0 3.0] 
[4.0 3.0 2.0] 
[3.0 2.0 6.0]] 
1:[[5.0 3.0 4.0] 
[3.0 4.0 3.0] 
[4.0 3.0 2.0] 
[3.0 2.0 6.0] 
[2.0 6.0 6.0] 
[6.0 6.0 6.0] 
[6.0 6.0 2.0]] 
2:[[3.0 2.0 14.0] 
[2.0 2.0 14.0] 
[6.0 2.0 14.0] 
[6.0 2.0 14.0] 
[6.0 2.0 14.0] 
[2.0 2.0 14.0] 
[4.0 2.0 14.0]] 
3:[[2.0] 
[6.0] 
[6.0] 
[6.0] 
[2.0] 
[4.0] 
[4.0]] 

だから、基本的に、どのように1をハードコーディングすることなく、[1]、...、[N-1])、[0](validationFunctionを呼び出すことができます.. .n?どのような引数の定義ですか?

機能をinputVarsがtheanoマトリックスのリストであり、targetVarがtheano行列で

validationFunction= theano.function(inputVars + [targetVar], testLoss) 

定義されます。私は別の方法で関数を定義する必要がありますか? inputVars + [targetVar]は、3つの入力と1つのターゲットのリストを作成します。

私はすでにtheanoとそのスタイルで多くの時間を費やしましたが、いくつかのことはあまりにもコンパクトであると書かれています。

入力は、変数またはインスタンスとして指定できます。また、 には変数がありますが、その変数に対応する呼び出し時引数がどのように使用されるべきかに関するいくつかの追加情報が添付されています。 同様に、Outインスタンスは、出力変数 がどのように返されるべきかについての情報を添付することができます。

答えて

0

私はこのstackoverflowで解決策を見つけ、私は単にそれを呼び出す必要がありました:

validationFunction(*batch) 

代わりの

validationFunction(batch) 

ああ親愛なる、私はより多くの詳細はこちらのpython私が開始すべてのその冗長な定型宣言とJavaからのインターフェースを定義するインターフェースが大好きです。

関連する問題