Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

deepDreamImage

Deep Dream を使用したネットワークの特徴の可視化

説明

I = deepDreamImage(net,layer,channels) は、数値インデックスまたは layer によって指定された名前を持つ層のネットワーク net 内で、チャネル channels を強く活性化するイメージの配列を返します。これらのイメージでは、ネットワークによって学習された特徴が強調表示されます。

I = deepDreamImage(net,layer,channels,Name,Value) は、1 つ以上のペアの引数 Name,Value によって追加オプションが指定されたイメージを返します。

すべて折りたたむ

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

net = alexnet;

deepDreamImage を使用して、最初の畳み込み層 ('conv1') で学習された最初の 25 個の特徴を可視化します。'PyramidLevels' を 1 に設定し、イメージがスケーリングされないようにします。

layer = 'conv1';
channels = 1:25;

I = deepDreamImage(net,layer,channels, ...
    'PyramidLevels',1, ...
    'Verbose',0);

figure
for i = 1:25
    subplot(5,5,i)
    imshow(I(:,:,:,i))
end

入力引数

すべて折りたたむ

学習済みネットワーク。SeriesNetwork オブジェクトまたは DAGNetwork オブジェクトとして指定します。事前学習済みのネットワークをインポートするか、関数 trainNetwork を使用して独自のネットワークに学習させることによって、学習済みネットワークを取得できます。事前学習済みのネットワークの詳細は、事前学習済みの深層ニューラル ネットワークを参照してください。

deepDreamImage はイメージ入力層のあるネットワークのみをサポートします。

可視化する層。正の整数、文字ベクトル、または string スカラーとして指定します。netDAGNetwork オブジェクトの場合、layer を文字ベクトルまたは string スカラーとしてのみ指定します。layer を、活性化を可視化する層のインデックスまたは名前として指定します。分類層の特徴を可視化するには、分類層の前の最後の全結合層を選択します。

ヒント

ReLU 層またはドロップアウト層を可視化するように選択すると、これらの層がネットワークの勾配に及ぼす影響によって、有用なイメージが生成されない場合があります。

クエリされたチャネル。チャネル インデックスのスカラーまたはベクトルとして指定します。channels がベクトルの場合、各チャネルの層の活性化は個別に最適化されます。選択可能な channels は選択した層によって異なります。畳み込み層では、NumFilters プロパティによって出力チャネルの数が指定されます。全結合層では、OutputSize プロパティによって出力チャネルの数が指定されます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: deepDreamImage(net,layer,channels,'NumIterations',100,'ExecutionEnvironment','gpu') は、ピラミッド レベルごとに 100 回の反復を使用してイメージを生成し、GPU を使用します。

Deep Dream を初期化するイメージ。この構文を使用して、ネットワーク層の活性化を最大化するためにイメージがどのように変更されるかを確認します。初期イメージの高さと幅の最小値は、選択した層までの (選択した層を含む) すべての層に依存します。

  • ネットワークの最後の方の層では、初期イメージの高さと幅がイメージ入力層と少なくとも同じでなければなりません。

  • ネットワークの最初の方の層では、初期イメージの高さと幅がイメージ入力層より小さくてもかまいません。ただし、選択した層でスカラー出力を生成するのに十分な大きさでなければなりません。

  • 初期イメージのチャネルの数は、ネットワークのイメージ入力層のチャネルの数と一致しなければなりません。

初期イメージを指定しない場合、標準正規分布から抽出されたピクセルから成るランダム イメージが使用されます。'PyramidLevels' も参照してください。

出力イメージの生成に使用する多重解像度イメージのピラミッド レベルの数。正の整数として指定します。ピラミッド レベルの数を増やすと、計算量が増加しますが、より大きな出力イメージを生成できます。初期イメージと同じサイズのイメージを生成するには、レベルの数を 1 に設定します。

例: 'PyramidLevels',3

各ピラミッド レベル間のスケーリング。1 より大きい値のスカラーとして指定します。ピラミッドのスケールを小さくすると、出力イメージに細かいディテールが組み込まれます。ピラミッドのスケールを調整することによって、ネットワークの最初の方の層で情報量の多いイメージを生成しやすくなります。

例: 'PyramidScale',1.4

ピラミッド レベルごとの反復回数。正の整数として指定します。反復回数を増やすと、計算量が増加しますが、より詳細なイメージを生成できます。

例: 'NumIterations',10

出力イメージに適用するスケーリングの種類。'OutputScaling' と次のいずれかで構成される、コンマ区切りのペアとして指定します。

説明
'linear'区間 [0 1] に出力ピクセル値をスケーリングします。それぞれの層のチャネルに対応する出力イメージ I(:,:,:,channel) は、個別にスケーリングされます。
'none'出力スケーリングを無効にします。

ピクセル値をスケーリングすると、ネットワークで出力イメージが誤分類される可能性があります。出力イメージを分類する場合は、'OutputScaling' の値を 'none' に設定します。

例: 'OutputScaling','linear'

コマンド ウィンドウに進行状況を表示するためのインジケーター。'Verbose' と、1 (true) または 0 (false) で構成されるコンマ区切りのペアとして指定します。表示される情報には、ピラミッド レベル、反復回数、および活性化の強さが含まれます。

例: 'Verbose',0

データ型: logical

ハードウェア リソース。次のいずれかの値として指定します。

  • "auto" — 利用可能な場合、GPU を使用します。そうでない場合、CPU を使用します。

  • "gpu" — GPU を使用します。GPU を使用するには Parallel Computing Toolbox™ ライセンスとサポートされている GPU デバイスが必要です。サポートされているデバイスについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。

  • "cpu" — CPU を使用します。

出力引数

すべて折りたたむ

出力イメージ。4 次元配列に格納されたグレースケール イメージまたはトゥルーカラー (RGB) イメージのシーケンスによって指定します。イメージは、channels(k) の出力を最大化するイメージが I(:,:,:,k) になるように、I の 4 番目の次元に沿って連結されます。imshow (Image Processing Toolbox) を使用して、出力イメージを表示できます。

アルゴリズム

この関数は、多重解像度イメージのピラミッドおよびラプラシアン ピラミッド勾配正規化を使用して高解像度イメージを生成する Deep Dream を実装します。ラプラシアン ピラミッド勾配正規化の詳細は、次のブログ投稿を参照してください。DeepDreaming with TensorFlow

関数 trainnet または trainNetwork を使用してニューラル ネットワークに学習させる場合や、DAGNetwork オブジェクトおよび SeriesNetwork オブジェクトと共に予測関数または検証関数を使用する場合、ソフトウェアは単精度浮動小数点演算を使用して、これらの計算を実行します。予測および検証のための関数には、predictclassify、および activations があります。CPU と GPU の両方を使用してニューラル ネットワークに学習させる場合、単精度演算が使用されます。

参照

[1] DeepDreaming with TensorFlow. https://github.com/tensorflow/docs/blob/master/site/en/tutorials/generative/deepdream.ipynb

バージョン履歴

R2017a で導入