2017-07-15 6 views
-1

私はテンソルw/shape(28,397,256)を出力するconvネットを持っています。私は時間次元である397軸の順序を保ちながらテンソル(28 * 256,397)を作成するためにそれを再構成したいと思います。再構成したら、モデルの別のレイヤーにそれを供給したいと思います。ケラスでテンソルを再構築する最良の方法は何ですか

Kerasの変形層では、順序が保持されませんでした。私はconvネットの出力テンソルを取り、手動でそれを新しいものにスプライスすることができると思っていましたが、テンソルをモデルの次の層に「入力」する方法はわかりません。助けていただければ幸いです。

conv = Conv2D(hidden_units, kernel_size, strides=(1,1), activation=conv_activation) 
model.add(conv) 
conv_output = MaxPooling2D(pool_size=pool_kernel) 
model.add(conv_output) 

### STACKING ### 
shape = conv_output.output.shape 
F_prime = shape[1].value 
T = shape[2].value 
M = shape[3].value 

reshaped = core.Reshape((T, F_prime*M), input_shape=shape[1:]) 
model.add(reshaped) 

recurr = LSTM(hidden_units, return_sequences=True, activation=recurr_activation, recurrent_activation='hard_sigmoid', dropout=0.3, recurrent_dropout=0.0) 
model.add(recurr) 

答えて

0

あなたはtf.concatまたはnp.concatenateにで見つかったconcatenateを使用することができます。私が最初に試したものを相続人

。あなたの場合、軸0と軸1をマージして、tf.concat(tensor, axis=0)を行うことができます。

tf.reshape(tensor, (28*256, 397))も使用できます。前後の要素の数は同じでなければならないことに注意してください。

希望すると便利です。

+0

私はそれを行うことができますが、再構成されたテンソルをモデルレイヤーにどのように統合するのですか?私が使用して変形を達成することができる: スプリット= tf.split(conv_output.output、M、軸= 3) 整形= tf.squeeze(tf.concat(スプリット、軸= 1)、軸= -1) conv_output.outputは、再構成が必要な出力テンソルです。しかし、それを次のレイヤーへの入力としてどのように指定しますか?私はテンソルフローのすべてをこの問題を避けるために書き換えることができたと思うが、理想的にはケラスを使いたい。 –

+0

Kerasからtf関数を呼び出すことができる。 'keras import backend from K'と' K.concat(...) ' –

+0

解決済み - カスタムケラス層を作成し、バックエンド操作を使用しました。 –

関連する問題