2017-05-09 15 views
0

ここでは単純な行列を作成しようとしています。バッチ内の各サンプルに対して繰り返します。Kera backend.repeat_elementsが機能しませんか?

ここ

が行列である。これまでのところ

balanceMatrix = np.array([[[5,10,10],[1,1,1],[1,1,1]]]) 
print(balanceMatrix.shape) 

balanceMatrix = K.constant(balanceMatrix) 
print(K.shape(balanceMatrix).eval()) 

、とても良い、私は期待行列字(1,3,3)を持っています。 ここでは、バッチ内のすべてのサンプル(60000個のサンプル)について繰り返す必要があります。 keras documentationから、私がすべきすべてはこれです:

balanceMatrix = K.repeat_elements(balanceMatrix, 60000,axis=0) 
print(K.shape(balanceMatrix).eval()) 

しかし、これは、私は単純に理解することはできません、次のエラー、発生します

IndexError        Traceback (most recent call last) 
<ipython-input-28-4356baf13de8> in <module>() 
    20 balanceMatrix = K.constant(balanceMatrix) 
    21 print(K.shape(balanceMatrix).eval()) 
---> 22 balanceMatrix = K.repeat_elements(balanceMatrix, 60000,axis=0) 
    23 print(K.shape(balanceMatrix).eval()) 
    24 

c:\users\ut65\appdata\local\programs\python\python35\lib\site-packages\keras\backend\theano_backend.py in repeat_elements(x, rep, axis) 
    743  if hasattr(x, '_keras_shape'): 
    744   y._keras_shape = list(x._keras_shape) 
--> 745   repeat_dim = x._keras_shape[axis] 
    746   if repeat_dim is not None: 
    747     y._keras_shape[axis] = repeat_dim * rep 

IndexError: tuple index out of range 

が起こっている何を? 私はnp.repeat(balanceMatrix,60000,axis=0)で最初にケラールテンソルを作成することができますが、ケラスオプションも同様に働かないといけませんか?

答えて

1

私はK.variableがここに役立つだろうと信じて:

balanceMatrix = K.variable(value=balanceMatrix) 
+0

感謝:) - あなたはなぜ知っていますか? ---テストした後、numpyオプションは高速です... –

+0

@Daniel私は旅行していて、私の携帯電話でたくさん書くことができませんでした:/私は正確な理由はわかりませんが、私は同じ問題を抱えていました。過去。私の推測では、Kerasは* inplace *構造を繰り返そうとしており、定数を使用するとクラッシュすることになります。そして、はい、構造体numpyを繰り返すこれらの操作がほぼ常により高速になるためです。しかし、numpyで繰り返してからKerasにすべてを移動すると、Kerasに移動してそこで繰り返すようなパフォーマンスが必要です(十分に大きい繰り返しの場合)。 –

関連する問題