2016-12-04 13 views
2

私は出力dims(4、x、y)を持つレイヤーを持っています。私はこれを4つの別々の(1、x、y)テンソルに分割したい。これを4つの他のレイヤーの入力として使うことができる。ケラスのレイヤーの分割出力

私が本質的に探しているのは、マージレイヤの反対です。私はケラスに分割層がないことを知っていますが、ケラスでこれを行う簡単な方法はありますか?

答えて

3

このようなものをお探しですか?

import keras.backend as K 
import numpy as np 

val = np.random.random((4, 2, 3)) 
t = K.variable(value=val) 
t1 = t[0, :, :] 
t2 = t[1, :, :] 
t3 = t[2, :, :] 
t4 = t[3, :, :] 

print('t1:\n', K.eval(t1)) 
print('t2:\n', K.eval(t2)) 
print('t3:\n', K.eval(t3)) 
print('t4:\n', K.eval(t4)) 
print('t:\n', K.eval(t)) 

それは次のような出力が得られます、今t1, t2, t3, t4shape(2,3)である

t1: 
[[ 0.18787734 0.1085723 0.01127671] 
[ 0.06032621 0.14528386 0.21176969]] 
t2: 
[[ 0.34292713 0.56848335 0.83797884] 
[ 0.11579451 0.21607392 0.80680907]] 
t3: 
[[ 0.1908586 0.48186591 0.23439431] 
[ 0.93413448 0.535191 0.16410089]] 
t4: 
[[ 0.54303145 0.78971165 0.9961108 ] 
[ 0.87826216 0.49061012 0.42450914]] 
t: 
[[[ 0.18787734 0.1085723 0.01127671] 
    [ 0.06032621 0.14528386 0.21176969]] 

[[ 0.34292713 0.56848335 0.83797884] 
    [ 0.11579451 0.21607392 0.80680907]] 

[[ 0.1908586 0.48186591 0.23439431] 
    [ 0.93413448 0.535191 0.16410089]] 

[[ 0.54303145 0.78971165 0.9961108 ] 
    [ 0.87826216 0.49061012 0.42450914]]] 

注こと。

print(t1.shape.eval()) # prints [2 3] 

あなたは3次元形状を維持したいのであれば、あなたは次のことを実行する必要があります。今すぐ

t1 = t[0, :, :].reshape((1, 2, 3)) 
t2 = t[1, :, :].reshape((1, 2, 3)) 
t3 = t[2, :, :].reshape((1, 2, 3)) 
t4 = t[3, :, :].reshape((1, 2, 3)) 

、あなたは正しい次元のスピッティングテンソルを取得します。

print(t1.shape.eval()) # prints [1 2 3] 

あなたの問題を解決するのに役立つことを願っています。

+0

私は実際にはスプリット/スライスレイヤーに類似したものを探していました。しかし、ラムダレイヤーでこのようなものを使用しなければならないと思います。おかげで –

+0

最高の方法は、答えを受け入れることです。ところで、私が知る限り、ケラの層を分割して開発中です。しかし、はい、ラムダレイヤーを使用することができます。私はラムダレイヤーを使用した例は提供していませんでした。だから私はあなたが私の答えを変更してあなたの目標を達成することができるだろうと思った:) –

関連する問題