2017-01-05 10 views
2

KerasにSpatiotemporal Full Convolutional Network(STFCN)を実装したいと思います。 3D畳み込み出力の各奥行きの列をフィードする必要があります。別のLSTMへの入力として、形状が(64, 16, 16)のテンソル。ケルサで列方向にテンソルを分割してSTFCNを実装する方法

これを明確にするために、(64 x 16 x 16)テンソルの寸法は(channels, height, width)です。テンソルを16 * 16 = 256テンソルの形に(明示的または暗黙的に)分割する必要があります。(64 x 1 x 1)

ここでは、時空間モジュールを説明するためのSTFCN論文の図を示します。私が上で説明したのは、「Spatial Features」と「Spatio-Temporal Module」の間の矢印です。このアイデアは、最高のKerasで実装される方法

The connection between FCn and Spatio-Temporal Module is the relevant part of the diagram.

答えて

1

あなたは(64,1,1,256)に形状(64,16,16)のテンソルを分割して、あなたが必要とするすべてのインデックスをサブセットするKeras Lambda

使用ラムダを使用してTensorflowからtf.splitを使用することができます。

import numpy as np 
import tensorflow as tf 
import keras.backend as K 
from keras.models import Model 
from keras.layers import Input, Lambda 

# input data 
data = np.ones((3,64,16,16)) 

# define lambda function to split 
def lambda_fun(x) : 
    x = K.expand_dims(x, 4) 
    split1 = tf.split(x, 16, 2) 
    x = K.concatenate(split1, 4) 
    split2 = tf.split(x, 16, 3) 
    x = K.concatenate(split2, 4) 
    return x 

## check thet splitting works fine 
input = Input(shape= (64,16,16)) 
ll = Lambda(lambda_fun)(input) 
model = Model(inputs=input, outputs=ll) 
res = model.predict(data) 
print(np.shape(res)) #(3, 64, 1, 1, 256) 
関連する問題