7

ここから畳み込みニューラル ネットワークについて読みました。それから torch7 で遊び始めました。CNN の畳み込み層と混同しています。

チュートリアルから、

1

The neurons in a layer will only be connected to a small region of the layer before it, instead of all of the neurons in a fully-connected manner.

2

For example, suppose that the input volume has size [32x32x3], (e.g. an RGB CIFAR-10 image). If the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights.

3

入力レイヤーが[32x32x3]の場合、CONV layer will compute the output of neurons that are connected to local regions in the input, each computing a dot product between their weights and the region they are connected to in the input volume. This may result in volume such as [32x32x12].

CONVレイヤーが画像に何をするかを試し始めました。私はtorch7でそれをしました。ここに私の実装があります、

require 'image'
require 'nn'

i = image.lena()

model = nn.Sequential()
model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)) --depth = 3, #output layer = 10, filter = 5x5

res = model:forward(i)
itorch.image(res)
print(#i)
print(#res)

出力 cnn 変換

  3
 512
 512
[torch.LongStorage of size 3]

  10
 508
 508
[torch.LongStorage of size 3]

CNNの構造を見てみましょう

CNN

だから、私の質問は、

質問1

畳み込みはこのように行われますか - 32x32x3 の画像を取得するとしましょう。そして5x5フィルターがあります。次に、5x5 フィルターは 32x32 画像全体を通過し、畳み込み画像を生成しますか? 画像全体で 5x5 フィルターをスライドすると、1 つの画像が得られます。10 個の出力レイヤーがある場合は、10 個の画像が得られます (出力からわかるように)。どうやってこれらを手に入れますか?(必要に応じて説明のための画像を参照してください)

ここに画像の説明を入力

質問2

conv 層のニューロンの数は? 出力層の数ですか?私が上に書いたコードでは、model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)). 10ですか?(出力層の数?)

もしそうなら、ポイント番号2は意味がありません。それによるとIf the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights.、ここの重さはどうなるの?私はこれに非常に混乱しています。torch で定義されたモデルでは、重みはありません。では、ここで重量がどのような役割を果たしているのでしょうか?

誰かが何が起こっているのか説明できますか?

4

2 に答える 2

10

畳み込みはこのように行われますか - 32x32x3 の画像を取得するとしましょう。そして5x5フィルターがあります。次に、5x5 フィルターは 32x32 画像全体を通過し、畳み込み画像を生成しますか?

32x32x3 の入力画像の場合、5x5 フィルターはすべての単一ピクセルに対して反復処理を行い、各ピクセルについて 5x5 の近傍を調べます。その近傍には 5*5*3=75 の値が含まれています。以下は、1 つの入力チャネルに対する 3x3 フィルターのサンプル画像です。つまり、3*3*1 値の近傍を持つものです ( source )。

畳み込み

個々のネイバーごとに、フィルターには 1 つのパラメーター (別名、重み) があるため、75 個のパラメーターがあります。次に、1 つの出力値 (ピクセル x、y の値) を計算するために、それらの隣接値を読み取り、それぞれの値にそれぞれのパラメーター/重みを掛けて、最後にそれらを加算します (離散畳み込みを参照)。トレーニング中に最適な重みを学習する必要があります。

したがって、1 つのフィルターが画像を反復処理し、ピクセルごとに新しい出力を生成します。複数のフィルターがある場合 (つまり、2 番目のパラメーターSpatialConvolutionMMが >1 の場合)、複数の出力 (トーチの「平面」) が得られます。

画像全体で 5x5 フィルターをスライドすると、1 つの画像が得られます。10 個の出力レイヤーがある場合は、10 個の画像が得られます (出力からわかるように)。どうやってこれらを手に入れますか?(必要に応じて説明のための画像を参照してください)

各出力プレーンは、独自のフィルターによって生成されます。各フィルターには独自のパラメーターがあります (この例では 5*5*3 パラメーター)。複数のフィルターのプロセスは、1 つの場合とまったく同じです。

conv 層のニューロンの数は? 出力層の数ですか?私が上で書いたコードでは、model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)) です。10ですか?(出力層の数?)

それらを重みまたはパラメーターと呼ぶ必要があります。「ニューロン」は畳み込み層にはあまり適していません。説明したように、パラメーターの数は、例のフィルターごとに 5*5*3=75 です。10 個のフィルター (「出力プレーン」) があるため、合計 750 個のパラメーターがあります。ネットワークに 2 番目のレイヤーを追加すると、model:add(nn.SpatialConvolutionMM(10, 10, 5, 5))フィルターごとに 5*5*10=250 個のパラメーターが追加され、合計で 250*10=2500 個のパラメーターが追加されます。その数が急速に増加することに注意してください (256 の入力プレーンで動作する 1 つのレイヤーで 512 のフィルター/出力プレーンは珍しいことではありません)。

詳細については、http://neuralnetworksanddeeplearning.com/chap6.htmlを参照してください。「畳み込みネットワークの紹介」の章までスクロールします。「局所受容野」の下には、おそらくフィルターが何をするかを理解するのに役立つ視覚化があります (1 つが上に示されています)。

于 2016-01-16T19:55:28.467 に答える