2017-08-08 10 views
2

Keras(TensorFlowバックエンド付き)を使用して深い畳み込みネットを調整しながら、MaxPooling2DAveragePooling2Dのハイブリッドを試してみたいと思います。最大プールと平均プールのハイブリッド

私はこのような何かを考えている。そのようなことは、既製提供されていないように見えるので、どのようにそれができる

hybrid_pooling(x, alpha_max) = 
    alpha_max * max_pooling(x) + (1 - alpha_max) * average_pooling(x) 

------- 
    |8 | 1| 
x = ---+--- 
    |1 | 6| 
    ------- 

average_pooling(x)    -> 4 
max_pooling(x)     -> 8 
hybrid_pooling(x, alpha_max=0.0) -> 4 
hybrid_pooling(x, alpha_max=0.25) -> 5 
hybrid_pooling(x, alpha_max=0.5) -> 6 
hybrid_pooling(x, alpha_max=0.75) -> 7 
hybrid_pooling(x, alpha_max=1.0) -> 8 

または式として効率的な方法で実装されていますか?

+1

これらの2つのプールのハイブリッドとはどういう意味ですか? –

+0

@VladimirBystrickyありがとう。私はそれに応じて私の質問を更新した。 –

+1

操作の基礎となる式について考えましたか?あなたの例から、それは加重平均のようです。 – wmacura

答えて

0

ここでは、両方のプーリングバリエーションを組み合わせるための別のソリューションを使用します。

  • が結果
  • はもちろんのこのアプローチは、より高い計算コストを持っていますが、どのよう

を組み合わせることを学ぶために小さなCONV層を使用して連結し、両方のプーリング機能にテンソルを与えますさらに柔軟性があります。 連結後のコンバレイヤーは、2つのプール結果をアルファで単純にブレンドすることを学ぶことができますが、異なる機能には異なるアルファを使用することもできます。コンバレイヤーと同様に、方法。

def hybrid_pool_layer(x, pool_size=(2,2)): 
    return Conv2D(int(x.shape[-1]), (1, 1))(
     keras.layers.concatenate([ 
      MaxPooling2D(pool_size)(x), 
      AveragePooling2D(pool_size)(x)])) 

をきっと1もConv2Dを残すことができるとちょうど2つのプーリングの連結を返し、次の層は、マージ作業をやらせる次のように

コード(Keras機能API)が見えます。しかし、上記の実装は、このハイブリッドプールから生じるテンソルが、通常の単一のプーリング操作から期待される形状を有することを保証する。

関連する問題