このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
畳み込みニューラル ネットワークの特徴の可視化
この例,畳み込みネットワーク学习さた特徴可视化する方法方法を说明说明。。。
畳み込みニューラルネットワークは,"特徴" を使用してイメージを分類します。ネットワークは、学習プロセスでこれらの特徴自体を学習します。学習時にネットワークが学習する内容は、よくわからない場合もあります。ただし、関数deepDreamImage
を使用して、学習された特徴を可視化することができます。
"畳み込み" 層は、3 次元の活性化ボリュームを出力します。ここで、3 番目の次元に沿ったスライスは、層の入力に適用された 1 つのフィルターに対応します。ネットワークの終わりにある"全結合" 層によって出力されるチャネルは、それ以前の層によって学習された特徴の高度な組み合わせに対応しています。
deepDreamImage
を使用して、ネットワーク層の特定のチャネルを強く活性化するイメージを生成することによって、学習された特徴を可視化できます。
この例には、Deep Learning Toolbox™ および Deep Learning Toolbox Modelfor GoogLeNet Networkサポート パッケージが必要です。
事前学習済みのネットワークの読み込み
事前学習済みの GoogLeNet ネットワークを読み込みます。
net = googlenet;
初期の畳み込み層の可視化
GoogLeNet ネットワークには、複数の畳み込み層があります。ネットワークの最初の方の畳み込み層では、受容野のサイズが小さく、学習する特徴は小さく低水準になります。ネットワークの最後の方の層では、受容野のサイズが大きく、学習する特徴が大きくなります。
analyzeNetwork
を使用して、ネットワーク アーキテクチャを表示し、畳み込み層の位置を確認します。
analyzeNetwork(net)
畳み込み層 1 の特徴
layer
を最初の畳み込み層になるように設定します。この層はネットワークの 2 番目の層であり、'conv1-7x7_s2'
という名前が付いています。
layer = 2; name = net.Layers(layer).Name
名称='conv1-7x7_s2'
channels
をインデックスのベクトル1:36
に設定することによって、deepDreamImage
を使用て层学习学习された最初のののの个个の特徴を化化し。'PyramidLevels'
を 1 に設定し、イメージがスケーリングされないようにします。イメージをまとめて表示するには、imtile
を使用でき。
deepDreamImage
gpuがある性性のができるそのそのそのそのその,,,,がががが使用ささされれますははははははははははははははははははは场合场合がががががが使用gpuがgpuがgpuをgpuをgpuをgpuをgpuをが必要。されいるデバイスについては,リリース别のgpuサポート(Parallel Computing Toolbox)を参照してください。
频道= 1:36;i = deepreamimage(net,name,channels,...'PyramidLevels',1);
|==============================================| | Iteration | Activation | Pyramid Level | | | Strength | | |==============================================| | 1 | 0.26 | 1 | | 2 | 6.99 | 1 | | 3 | 14.24 | 1 | | 4 | 21.49 | 1 | | 5 | 28.74 | 1 | | 6 | 35.99 | 1 | | 7 | 43.24 | 1 | | 8 | 50.50 | 1 | | 9 | 57.75 | 1 | | 10 | 65.00 | 1 | |==============================================|
figure I = imtile(I,'ThumbnailSize',[64 64]); imshow(I) title(['Layer ',name,' Features'],“口译员”,'none')
これらの多くは,エッジと含まれます。これ,'conv1-7x7_s2'
層のフィルターがエッジ検出器およびカラー フィルターであることを示します。
畳み込み層 2 の特徴
2番目の畳み込み層は'conv2-3x3_reduce'
という名前で、層 6 に対応します。channels
をインデックスのベクトル1:36
に設定することによって、この層で学習された最初の 36 個の特徴を可視化します。
最適化プロセスで詳細な出力を表示しないようにするには、deepDreamImage.
を呼び出すときに'Verbose'
を'false'
に設定します。
layer = 6; name = net.Layers(layer).Name
name = 'conv2-3x3_reduce'
频道= 1:36;i = deepreamimage(net,name,channels,...'Verbose',错误的,...'PyramidLevels',1); figure I = imtile(I,'ThumbnailSize',[64 64]); imshow(I) name = net.Layers(layer).Name; title(['Layer ',name,' Features'],“口译员”,'none')
この層のフィルターは、最初の畳み込み層よりも複雑なパターンを検出できます。
より深い畳み込み層の可視化
深い層では、それ以前の層によって学習された特徴の高水準の組み合わせを学習します。
ピラミッド レベルの数およびピラミッド レベル 1 つあたりの反復回数を増やすと、計算量が増加しますが、より詳細なイメージを生成できます。反復の回数を増やすには'NumIterations'
オプションを使用し、ピラミッド レベルの数を増やすには '金字塔级
' オプションを使用します。
层= 97;名称= net.layers(layer).Name
name = 'inception_4e-1x1'
频道= 1:6;i = deepreamimage(net,name,channels,...'Verbose',错误的,..."NumIterations",20,...'PyramidLevels',2); figure I = imtile(I,'ThumbnailSize',[250 250]); imshow(I) name = net.Layers(layer).Name; title(['Layer ',name,' Features'],“口译员”,'none')
ネットワークの層が深くなるほどフィルターが詳細になり、複雑なパターンとテクスチャが学習されていることに注意してください。
全結合層の可視化
各クラスに最も似たイメージを生成するには、全結合層を選択し、channels
をクラスのインデックスに設定します。
全結合層 (層 142) を選択します。
layer = 142; name = net.Layers(layer).Name
name = 'loss3-classifier'
可視化するクラスを選択するには、channels
をこれらのクラス名のインデックスに設定します。
channels = [114 293 341 484 563 950];
クラスは、出力層 (最後の層) のClasses
プロパティに格納されます。channels
のエントリを選択することによって、選択されたクラスの名前を表示できます。
net.Layers(end).Classes(channels)
ans =6×1 categoricalsnail tiger zebra castle fountain strawberry
これらのクラスを強く活性化する詳細なイメージを生成します。deepDreamImage
を呼び出すときに'NumIterations'
100ににとよりなながれ。全结合结合层でで生成生成れたイメージイメージは,,,イメージイメージクラス
i = deepreamimage(net,name,channels,...'Verbose',错误的,...'NumIterations', 100,...'PyramidLevels',2); figure I = imtile(I,'ThumbnailSize',[250 250]); imshow(I) name = net.Layers(layer).Name; title(['Layer ',name,' Features'])
生成されたイメージは選択されたクラスを強く活性化しています。'zebra' クラスとして生成されたイメージは鮮明なシマウマ模様を含み、'castle' クラスとして生成されたイメージはタレットと窓を含んでいます。
参考
googlenet
|deepDreamImage
|occlusionSensitivity
|gradCAM
|imageLIME