密集レイヤーの出力をConvolution2Dレイヤーと融合させるカスタムレイヤーを作りたいと思います。Keras - Convolution2Dレイヤーと密なレイヤーの融合
アイデアがthis paperから来て、ここでは、ネットワークの:
融着層は、高密度テンソル(256
)とConvolution2Dテンソル(256x28x28
)を融合しようとします。私は、新しいカスタム層を作ることになった
:ここ
y_global => Dense layer output with shape 256
y_mid => Convolution2D layer output with shape 256x28x28
フュージョンプロセスに関する論文の記述があります:ここにそれのための方程式です以下のようになります。
class FusionLayer(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(FusionLayer, self).__init__(**kwargs)
def build(self, input_shape):
input_dim = input_shape[1][1]
initial_weight_value = np.random.random((input_dim, self.output_dim))
self.W = K.variable(initial_weight_value)
self.b = K.zeros((input_dim,))
self.trainable_weights = [self.W, self.b]
def call(self, inputs, mask=None):
y_global = inputs[0]
y_mid = inputs[1]
# the code below should be modified
output = K.dot(K.concatenate([y_global, y_mid]), self.W)
output += self.b
return self.activation(output)
def get_output_shape_for(self, input_shape):
assert input_shape and len(input_shape) == 2
return (input_shape[0], self.output_dim)
私は__init__
とbuild
方法は右だと思いますが、出力が言及した式と同じになるように、私はcall
層にy-mid
(256x28x28寸法)とy_global
(256 dimesnions)を連結する方法がわかりません上記。
この式をcall
メソッドでどのように実装できますか?
本当にありがとうございました...
がUPDATE:成功したこれらの2層のデータを統合する他の方法は、それが正確に紙に記載された方法である必要はありません...私のためにも受け入れられますしかし、少なくとも許容可能な出力を返す必要があります...