AlexNet または VGG Net のパラメーターの正しい数を指定できません。
たとえば、VGG Netのconv3-256
レイヤーのパラメーターの数を計算するには、答えは0.59M =(3 * 3)*(256 * 256)、つまり(カーネルサイズ)*(両方の積ジョイントレイヤーのチャネル数)、しかし、その方法では、138M
パラメーターを取得できません。
計算のどこが間違っているのか、正しい計算手順を教えてください。
16層のVGG Net(表1、列D)を参照する場合、138M
はこのネットワークのパラメーターの合計数を指します。つまり、すべての畳み込み層だけでなく、完全に接続されたもの。
3 x conv3-256
層で構成される3番目の畳み込み段階を見る:
畳み込みカーネルは、これらの各レイヤーで3x3です。パラメータに関しては、次のことができます。
上で説明したように、すべてのレイヤーだけでなく、完全に接続されたレイヤーに対してもこれを行い、これらの値を合計して最終的な138Mの数値を取得する必要があります。
-
[〜#〜] update [〜#〜]:レイヤー間の内訳は次のとおりです。
conv3-64 x 2 : 38,720
conv3-128 x 2 : 221,440
conv3-256 x 3 : 1,475,328
conv3-512 x 3 : 5,899,776
conv3-512 x 3 : 7,079,424
fc1 : 102,764,544
fc2 : 16,781,312
fc3 : 4,097,000
TOTAL : 138,357,544
特に、完全に接続されたレイヤー(fc)の場合:
fc1 (x): (512x7x7)x4,096 (weights) + 4,096 (biases)
fc2 : 4,096x4,096 (weights) + 4,096 (biases)
fc3 : 4,096x1,000 (weights) + 1,000 (biases)
(x)記事のセクション3.2を参照してください:完全に接続された層は、最初に畳み込み層に変換されます(最初のFC層は7×7変換層に、最後の2つのFC層は1×1コンバージョンレイヤー)
fc1
に関する詳細
完全に接続されたレイヤーを供給する直前の空間解像度を超えると、7x7ピクセルになります。これは、このVGG Netが畳み込みの前にspatial paddingを使用するためです。
[...] convの空間パディング。レイヤー入力は、畳み込み後に空間解像度が保持されるようになっています。つまり、パディングは3×3の変換に対して1ピクセルです。レイヤー
このようなパディングを使用し、224x224ピクセルの入力画像を操作すると、解像度が次のようにレイヤーに沿って低下します。512個のフィーチャマップを持つ最後の畳み込み/プーリングステージの後、112x112、56x56、28x28、14x14および7x7です。
これにより、寸法が512x7x7のfc1
に渡される特徴ベクトルが得られます。
VGG-16ネットワークの計算の詳細な内訳は、 CS231n 講義ノートにも記載されています。
INPUT: [224x224x3] memory: 224*224*3=150K weights: 0
CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*3)*64 = 1,728
CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*64)*64 = 36,864
POOL2: [112x112x64] memory: 112*112*64=800K weights: 0
CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*64)*128 = 73,728
CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*128)*128 = 147,456
POOL2: [56x56x128] memory: 56*56*128=400K weights: 0
CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*128)*256 = 294,912
CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824
CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824
POOL2: [28x28x256] memory: 28*28*256=200K weights: 0
CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*256)*512 = 1,179,648
CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296
CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296
POOL2: [14x14x512] memory: 14*14*512=100K weights: 0
CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296
POOL2: [7x7x512] memory: 7*7*512=25K weights: 0
FC: [1x1x4096] memory: 4096 weights: 7*7*512*4096 = 102,760,448
FC: [1x1x4096] memory: 4096 weights: 4096*4096 = 16,777,216
FC: [1x1x1000] memory: 1000 weights: 4096*1000 = 4,096,000
TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)
TOTAL params: 138M parameters
それでも、これが古い投稿であることは知っています。@ deltheilが受け入れた答えには間違いが含まれていると思います。そうでなければ、私は修正されることを嬉しく思います。畳み込み層にはバイアスがありません。つまり、128x3x3x256(重み)+ 256(バイアス)= 295,168は128x3x3x256(重み)= 294,9112でなければなりません
ありがとう
以下のVGG-16アーキテクチャは (表1、列D)の@deltheilで強調表示されている元の論文 にあり、そこから引用しています
2.1アーキテクチャ
トレーニング中のConvNetへの入力は、固定サイズの224×224 RGB画像です。行う前処理は、各ピクセルからトレーニングセットで計算された平均RGB値を減算することだけです。
画像は、畳み込み(conv。)レイヤーのスタックを通過し、非常に小さな受容フィールドを持つフィルターを使用します:3×3(左/右、上/下、中央の概念をキャプチャするための最小サイズ) 。畳み込みストライドは1ピクセルに固定されています。 convの空間パディング。レイヤー入力は、畳み込み後に空間解像度が保持されるようになっています。つまり、パディングは3×3の変換に対して1ピクセルです。層。空間プーリングは5つの最大プーリングレイヤーによって実行されます。レイヤー(すべてのコンバージョンレイヤーの後に最大プーリングが続くわけではありません)。最大プーリングは、2×2ピクセルのウィンドウで、ストライド2で実行されます。
畳み込み層(異なるアーキテクチャで異なる深さ)のスタックの後に3つの完全接続(FC)層が続きます:最初の2つはそれぞれ4096のチャネルを持ち、3つ目は1000ウェイのILSVRC分類を実行するため、1000のチャネル(1つクラスごとに)。
最後の層は、ソフトマックス層です。
上記を使用し、
注:
各アクティベーションシェイプ列を単純に乗算して、アクティベーションサイズを取得できます。
CONV3:入力で3 * 3のフィルターが畳み込まれることを意味します!
MAXPOOL3-2:平均、3番目のプーリング層、2 * 2フィルター、ストライド= 2、パディング= 0(プーリング層ではかなり標準的)
ステージ3:複数のCONVレイヤーがスタックされていることを意味します!同じパディング= 1、、ストライド= 1、フィルター3 * 3
Cin:入力レイヤーからの深度a.k.aチャンネルを意味します!
Cout:発信チャネルの深さを意味します(より複雑な機能を学習するために、異なるように設定します!)、
CinとCoutは、垂直エッジ、水平エッジと水平方向のエッジやエッジを45度など、さまざまなスケールで複数の機能を学習するために一緒にスタックするフィルターの数です!異なる種類のエッジのそれぞれ!!
n:INPUT-imageの場合、n = 224などの深さのない入力次元!
p:各レイヤーのパディング
s:各レイヤーに使用されるストライド
f:フィルターサイズ(CONVの場合は3 * 3、MAXPOOLレイヤーの場合は2 * 2)!
MAXPOOL5-2の後は、ボリュームを単純にフラット化し、最初のFCレイヤーとインターフェイスします。
最後に、最後の列で計算されたすべての重みを追加すると、138,357,544(138百万)のパラメーターでVGG-15のトレーニングが行われます!
各cnnレイヤーのパラメーターの数を計算する方法は次のとおりです。
いくつかの定義
n--フィルターの幅
m--フィルターの高さ
k--入力フィーチャマップの数
L--出力機能マップの数
パラメータの数#=(n * m * k + 1)* L。最初の寄与は重みからであり、2番目はバイアスからです。