主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

畳み込みニューラルネットワークの特徴の可視化

この例では,畳み込みニューラルネットワークによって学習された特徴を可視化する方法を説明します。

畳み込みニューラルネットワークでは,”“特徴を使用してイメージを分類します。ネットワークは,学習プロセスでこれらの特徴自体を学習します。学習時にネットワークが学習する内容は,よくわからない場合もあります。ただし,関数deepDreamImageを使用して,学習された特徴を可視化することができます。

”“畳み込み層は3次元の活性化ボリュームを出力します。ここで3番目の次元に沿ったスライスは,層の入力に適用された1つのフィルターに対応します。ネットワークの終わりにある“全結合“層によって出力されるチャネルは,それ以前の層によって学習された特徴の高度な組み合わせに対応しています。

deepDreamImageを使用して,ネットワーク層の特定のチャネルを強く活性化するイメージを生成することによって,学習された特徴を可視化できます。

この例には,深度学习工具箱™および深度学习工具箱模型GoogLeNet网络サポートパッケージが必要です。

事前学習済みのネットワークの読み込み

事前学習済みのGoogLeNetネットワークを読み込みます。

网= googlenet;

初期の畳み込み層の可視化

GoogLeNetネットワークには,複数の畳み込み層があります。ネットワークの最初の方の畳み込み層では,受容野のサイズが小さく,学習する特徴は小さく低水準になります。ネットワークの最後の方の層では,受容野のサイズが大きく,学習する特徴が大きくなります。

analyzeNetworkを使用して,ネットワークアーキテクチャを表示し,畳み込み層の位置を確認します。

analyzeNetwork(净)

畳み込み層1の特徴

を最初の畳み込み層になるように設定します。この層はネットワークの2番目の層であり,“conv1-7x7_s2”という名前が付いています。

层= 2;name = net.Layers(层). name
name = ' conv1-7x7_s2 '

渠道をインデックスのベクトル1:36时に設定することによって,deepDreamImageを使用してこの層で学習された最初の36個の特徴を可視化します。“PyramidLevels”を1に設定し,イメージがスケーリングされないようにします。イメージをまとめて表示するには,imtileを使用できます。

deepDreamImageでは既定で,互換性のあるGPUが利用できる場合は,そのGPUが使用されます。そうでない場合はCPUが使用されます。GPUを使用するには,并行计算工具箱™とサポートされているGPUデバイスが必要です。サポートされているデバイスについては,リリース別のGPUサポート(并行计算工具箱)を参照してください。

渠道= 1:36时;我= deepDreamImage(净、名称、通道...“PyramidLevels”1);
|==============================================| | 迭代| |金字塔激活水平| | |力量  | | |==============================================| | 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(n .)“ThumbnailSize”64年[64]);imshow (I)标题([“层”、名称、“特性”],“翻译”,“没有”

これらのイメージの多くには,エッジと色が含まれます。これは,“conv1-7x7_s2”層のフィルターがエッジ検出器およびカラーフィルターであることを示します。

畳み込み層2の特徴

2番目の畳み込み層は“conv2-3x3_reduce”という名前で層6に対応します。渠道をインデックスのベクトル1:36时に設定することによって,この層で学習された最初の36個の特徴を可視化します。

最適化プロセスで詳細な出力を表示しないようにするには,deepDreamImage。を呼び出すときに“详细”“假”に設定します。

层= 6;name = net.Layers(层). name
name = ' conv2-3x3_reduce '
渠道= 1:36时;我= deepDreamImage(净、名称、通道...“详细”假的,...“PyramidLevels”1);figure I = imtile(n .)“ThumbnailSize”64年[64]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”],“翻译”,“没有”

この層のフィルターは,最初の畳み込み層よりも複雑なパターンを検出できます。

より深い畳み込み層の可視化

深い層では,それ以前の層によって学習された特徴の高水準の組み合わせを学習します。

ピラミッドレベルの数およびピラミッドレベル1つあたりの反復回数を増やすと,計算量が増加しますが,より詳細なイメージを生成できます。反復の回数を増やすには“NumIterations”オプションを使用し,ピラミッドレベルの数を増やすには”PyramidLevels“オプションを使用します。

层= 97;name = net.Layers(层). name
name = ' inception_4e-1x1 '
渠道= 1:6;我= deepDreamImage(净、名称、通道...“详细”假的,...“NumIterations”, 20岁,...“PyramidLevels”2);figure I = imtile(n .)“ThumbnailSize”250年[250]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”],“翻译”,“没有”

ネットワークの層が深くなるほどフィルターが詳細になり,複雑なパターンとテクスチャが学習されていることに注意してください。

全結合層の可視化

各クラスに最も似たイメージを生成するには,全結合層を選択し,渠道をクラスのインデックスに設定します。

全結合層(層142)を選択します。

层= 142;name = net.Layers(层). name
name = ' loss3-classifier '

可視化するクラスを選択するには,渠道をこれらのクラス名のインデックスに設定します。

通道= [114 293 341 484 563 950];

クラスは,出力層(最後の層)のプロパティに格納されます。渠道のエントリを選択することによって,選択されたクラスの名前を表示できます。

net.Layers(结束). class(渠道)
ans =6×1分类蜗牛老虎斑马城堡喷泉草莓

これらのクラスを強く活性化する詳細なイメージを生成します。deepDreamImageを呼び出すときに“NumIterations”100年をに設定すると,より詳細なイメージが生成されます。全結合層で生成されたイメージは,イメージクラスに対応しています。

我= deepDreamImage(净、名称、通道...“详细”假的,...“NumIterations”, 100,...“PyramidLevels”2);figure I = imtile(n .)“ThumbnailSize”250年[250]);imshow(I) name = net.Layers(layer).Name;标题([“层”、名称、“特性”])

生成されたイメージは選択されたクラスを強く活性化しています。“斑马”クラスとして生成されたイメージは鮮明なシマウマ模様を含み,‘城堡’クラスとして生成されたイメージはタレットと窓を含んでいます。

参考

||||

関連するトピック