ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

deepDreamImage

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

構文

I = deepDreamImage(net,layer,channels)
I = deepDreamImage(net,layer,channels,Name,Value)

説明

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

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

可視化する層。正の整数スカラーまたは文字ベクトルとして指定します。分類層の特徴を可視化するには、分類層の前の最後の全結合層を選択します。

ヒント

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

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

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: deepDreamImage(net,layer,channels,'NumItetations',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','linear'

データ型: char

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

例: 'Verbose',0

データ型: logical

ハードウェア リソース。'ExecutionEnvironment' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

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

  • 'gpu' — GPU を使用します。GPU を使用するには、Parallel Computing Toolbox™ および Compute Capability 3.0 以上の CUDA® 対応 NVIDIA® GPU が必要です。 Parallel Computing Toolbox または適切な GPU が利用できない場合、エラーが返されます。

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

例: 'ExecutionEnvironment','cpu'

出力引数

すべて折りたたむ

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

アルゴリズム

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

Deep Learning Toolbox™ に含まれる深層学習における学習、予測、検証用のすべての関数は、単精度浮動小数点演算を使用して計算を実行します。深層学習用の関数には trainNetworkpredictclassifyactivations などがあります。CPU と GPU の両方を使用してネットワークに学習させる場合、単精度演算が使用されます。

参照

[1] DeepDreaming with TensorFlow. https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb

R2017a で導入