6

Dense Layer の出力を Convolution2D Layer と融合するカスタム レイヤを作成したいと考えています。

アイデアはこの論文から生まれました。ネットワークは次のとおりです。

ネットワーク

融合層は、Convolution2D tensor ( 256x28x28) を Dense tensor ( ) と融合しようとし256ます。方程式は次のとおりです。

フュージョンフォーミュラ

y_global => Dense layer output with shape 256 y_mid => Convolution2D layer output with shape 256x28x28

Fusion プロセスに関する論文の説明は次のとおりです。

キャプチャー3

以下のような新しいカスタムレイヤーを作成することになりました。

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__メソッドとメソッドは正しいと思いますが、出力が上記の式と同じになるように、レイヤーで (256 次元) を(256x28x28 次元)とbuild連結する方法がわかりません。y_globaly-midcall

メソッドでこの方程式をどのように実装できcallますか?

本当にありがとう...

更新:これらの2つのレイヤーのデータを正常に統合する他の方法も受け入れられます...ペーパーで言及されている方法である必要はありませんが、少なくとも受け入れ可能な出力を返す必要があります...

4

3 に答える 3

0

私の意見では、新しい種類のレイヤーを実装することは、このタスクを複雑にする方法です。次のレイヤーを使用することを強くお勧めします。

期待される動作を得るために。

于 2016-11-26T00:33:50.167 に答える