2016-08-10 8 views
1

私は1つのパッチスコアに基づいて分類器を作成しているので、ネットワークが異なる画像に対して生成する予測をまとめておきたいと思います。Caffe、バッチ間の操作

から https://github.com/BVLC/caffe/blob/master/src/caffe/proto/caffe.proto,削減は、最後の軸とは異なる軸での操作をサポートしていません。 また、プーリング操作では入力の平均値が生成されますが、完全なバッチに触れることはありません。

私はPython層を実装しましたが、これは大規模な実験には十分速くありません。

既に利用可能なツールを使用して、第1軸で「合計」する、またはより一般的には操作する方法はありますか?

答えて

1

はい。あなたはできる。予測値がN x p x q x rの場合は、最初にSliceSliceLayer)を使用し、Nのブロブを作成します。それぞれの形状は1 x p x q x rです。次に(EltwiseLayer)層のためにこれらのNブロブをNボトムとして使用して単一のトップを作ります。あなたの予測は寸法がある場合

+0

私はこのことについて考えたが、私の場合の問題点は、その 'SliceLayer'ですバッチと同じくらい多くのトップブロブを必要とします(私が間違っていない場合)。私は10000のトップブロブを必要とするので、私は他の解決策を見つけようとしていました。 –

+0

.prototxtが複雑になったり、実行時間が心配ですか?その後者(時間)の場合は、スライス層なしでそれを時間を計ることができます。 prototxtの記述に関しては、私は一般的にPythonコードを使用してprototxt([this](https://github.com/XiaozhiChen/resnet-generator/blob/master/resnet_generator.py)コードからインスピレーションを受けています)を記述します。これにより、100個のトップブロブを簡単に書くことができます。それ以外の場合は、既存のレイヤーを使用する方法はありません。もちろん、スライスとEltwiseを組み合わせた独自のレイヤーを書くことができます。 –

+0

この完全な答えをありがとう。私はもっ​​と時間が心配です。私はそれを試して、それがどれくらいかかります参照してください。 –

1

N x cNcチャンネルのミニバッチサイズのために)、あなたは次元Nc塊にこれをスプライスすることができます。これらは、レイヤーに供給することができます。

たとえば、あなたはJinja2のテンプレートとして次のように記述する:

に展開
layer { 
    name: "pred-slice" 
    type: "Slice" 
    bottom: "pred" 
{%- for num in range(10) %} 
    top: "pred-{{ num }}-vector" 
{%- endfor %} 
    slice_param { 
    slice_dim: 1 
{%- for num in range(1, 10) %} 
    slice_point: {{ num }} 
{%- endfor %} 
    } 
    include { 
    phase: TEST 
    } 
} 

{%- for num in range(10) %} 
layer { 
    name: "pred-{{num}}" 
    type: "Reduction" 
    bottom: "pred-{{ num }}-vector" 
    top: "pred-{{ num }}" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
{%- endfor %} 

layer { 
    name: "pred-slice" 
    type: "Slice" 
    bottom: "pred" 
    top: "pred-0-vector" 
    top: "pred-1-vector" 
    top: "pred-2-vector" 
    top: "pred-3-vector" 
    top: "pred-4-vector" 
    top: "pred-5-vector" 
    top: "pred-6-vector" 
    top: "pred-7-vector" 
    top: "pred-8-vector" 
    top: "pred-9-vector" 
    slice_param { 
    slice_dim: 1 
    slice_point: 1 
    slice_point: 2 
    slice_point: 3 
    slice_point: 4 
    slice_point: 5 
    slice_point: 6 
    slice_point: 7 
    slice_point: 8 
    slice_point: 9 
    } 
    include { 
    phase: TEST 
    } 
} 
layer { 
    name: "pred-0" 
    type: "Reduction" 
    bottom: "pred-0-vector" 
    top: "pred-0" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-1" 
    type: "Reduction" 
    bottom: "pred-1-vector" 
    top: "pred-1" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-2" 
    type: "Reduction" 
    bottom: "pred-2-vector" 
    top: "pred-2" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-3" 
    type: "Reduction" 
    bottom: "pred-3-vector" 
    top: "pred-3" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-4" 
    type: "Reduction" 
    bottom: "pred-4-vector" 
    top: "pred-4" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-5" 
    type: "Reduction" 
    bottom: "pred-5-vector" 
    top: "pred-5" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-6" 
    type: "Reduction" 
    bottom: "pred-6-vector" 
    top: "pred-6" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-7" 
    type: "Reduction" 
    bottom: "pred-7-vector" 
    top: "pred-7" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-8" 
    type: "Reduction" 
    bottom: "pred-8-vector" 
    top: "pred-8" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
layer { 
    name: "pred-9" 
    type: "Reduction" 
    bottom: "pred-9-vector" 
    top: "pred-9" 
    include { 
    phase: TEST 
    } 
    reduction_param { 
    operation: MEAN 
    } 
} 
関連する問題