ドキュメンテーション

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

deepDreamImage

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

構文

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

説明

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

I = deepDreamImage(___,Name,Value) は、前の構文のいずれかを使用し、1 つ以上のペアの引数 Name,Value によって追加オプションが指定されたイメージを返します。

すべて折りたたむ

簡単なたたみ込みニューラル ネットワークを作成し、deepDreamImage を使用して学習済みの特徴を可視化します。

標本データを読み込みます。

[XTrain,TTrain] = digitTrain4DArrayData;

数字のイメージ データを分類する簡単なネットワークを構築します。

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

学習オプションを作成します。

options = trainingOptions('sgdm');

ネットワークに学習をさせます。

net = trainNetwork(XTrain,TTrain,layers,options);
Training on single CPU.
Initializing image normalization.
|=========================================================================================|
|     Epoch    |   Iteration  | Time Elapsed |  Mini-batch  |  Mini-batch  | Base Learning|
|              |              |  (seconds)   |     Loss     |   Accuracy   |     Rate     |
|=========================================================================================|
|            1 |            1 |         0.91 |       2.3026 |        7.81% |       0.0100 |
|            2 |           50 |        18.02 |       2.2735 |       33.59% |       0.0100 |
|            3 |          100 |        34.97 |       1.6613 |       48.44% |       0.0100 |
|            4 |          150 |        52.49 |       1.1803 |       64.06% |       0.0100 |
|            6 |          200 |        71.99 |       1.0499 |       64.06% |       0.0100 |
|            7 |          250 |        91.62 |       0.8391 |       76.56% |       0.0100 |
|            8 |          300 |       110.88 |       0.6981 |       77.34% |       0.0100 |
|            9 |          350 |       129.83 |       0.7084 |       77.34% |       0.0100 |
|           11 |          400 |       148.89 |       0.4902 |       87.50% |       0.0100 |
|           12 |          450 |       168.09 |       0.3839 |       91.41% |       0.0100 |
|           13 |          500 |       187.13 |       0.2986 |       92.19% |       0.0100 |
|           15 |          550 |       206.23 |       0.2583 |       93.75% |       0.0100 |
|           16 |          600 |       224.82 |       0.2009 |       97.66% |       0.0100 |
|           17 |          650 |       243.69 |       0.2642 |       92.97% |       0.0100 |
|           18 |          700 |       262.45 |       0.1448 |       97.66% |       0.0100 |
|           20 |          750 |       281.03 |       0.1314 |       96.88% |       0.0100 |
|           21 |          800 |       299.14 |       0.1232 |       97.66% |       0.0100 |
|           22 |          850 |       317.51 |       0.1009 |       98.44% |       0.0100 |
|           24 |          900 |       336.97 |       0.1051 |      100.00% |       0.0100 |
|           25 |          950 |       356.92 |       0.1483 |       97.66% |       0.0100 |
|           26 |         1000 |       377.16 |       0.0743 |       99.22% |       0.0100 |
|           27 |         1050 |       398.81 |       0.0603 |      100.00% |       0.0100 |
|           29 |         1100 |       419.79 |       0.0769 |       99.22% |       0.0100 |
|           30 |         1150 |       440.56 |       0.0524 |      100.00% |       0.0100 |
|           30 |         1170 |       448.34 |       0.0566 |      100.00% |       0.0100 |
|=========================================================================================|

特定の数字に最も似たイメージを生成するには、最後の全結合層を指定します。ネットワーク層を表示します。

net.Layers
ans = 

  7x1 Layer array with layers:

     1   'imageinput'    Image Input             28x28x1 images with 'zerocenter' normalization
     2   'conv'          Convolution             20 5x5x1 convolutions with stride [1  1] and padding [0  0]
     3   'relu'          ReLU                    ReLU
     4   'maxpool'       Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0]
     5   'fc'            Fully Connected         10 fully connected layer
     6   'softmax'       Softmax                 softmax
     7   'classoutput'   Classification Output   crossentropyex with '0', '1', and 8 other classes

最後の全結合層を指定します。

layer = 'fc';

数字 0 を可視化する最初のチャネルを指定します。

channels = 1;

イメージを生成して表示します。

I = deepDreamImage(net,layer,channels,'Verbose',false);
imshow(I)

入力引数

すべて折りたたむ

学習済みネットワーク。関数 trainNetwork によって返される SeriesNetwork オブジェクトとして指定します。

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

ヒント

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

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char

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

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名前/値のペアの引数

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

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

すべて折りたたむ

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

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

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

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

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

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

例: 'PyramidLevels',3

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

例: 'PyramidScale',1.4

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

例: 'NumIterations',10

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力イメージに適用するスケーリングの種類。'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 が必要です。適切な GPU が利用できない場合、エラーが返されます。
'cpu'CPU を使用します。

例: 'ExecutionEnvironment','auto'

データ型: char

出力引数

すべて折りたたむ

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

アルゴリズム

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

参照

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

R2017a で導入

この情報は役に立ちましたか?