이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

deepDreamImage

딥 드림(Deep Dream)을 사용하여 네트워크 특징 시각화

설명

I = deepDreamImage(net,layer,channels)는 네트워크 net에서 layer로 주어진 숫자형 인덱스 또는 이름을 갖는 계층의 채널 channels를 강하게 활성화하는 이미지로 구성된 배열을 반환합니다. 이러한 이미지는 네트워크가 학습한 특징이 무엇인지 보여줍니다.

예제

I = deepDreamImage(net,layer,channels,Name,Value)는 하나 이상의 Name,Value 쌍 인수로 지정된 추가 옵션을 사용하여 이미지를 반환합니다.

예제

모두 축소

사전 훈련된 AlexNet 네트워크를 불러옵니다.

net = alexnet;

첫 번째 컨벌루션 계층('conv1')이 학습한 처음 25개의 특징을 deepDreamImage를 사용하여 시각화합니다. 이미지가 스케일링되지 않도록 '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를 사용합니다.

딥 드림을 초기화하는 이미지. 네트워크 계층 활성화 값을 최대화하기 위해 이미지가 어떻게 수정되는지 보려면 이 구문을 사용하십시오. 초기 이미지의 최소 높이와 너비는 선택한 계층을 포함하여 이 계층까지 이르는 모든 계층에 좌우됩니다.

  • 네트워크의 끝부분에 있는 계층의 경우, 초기 이미지는 이미지 입력 계층과 높이와 너비가 최소한 같아야 합니다.

  • 네트워크의 시작 부분에 있는 계층의 경우, 초기 이미지는 이미지 입력 계층보다 높이와 너비가 작아도 됩니다. 그러나 선택한 계층에서 스칼라 출력값을 생성할 수 있을 만큼은 커야 합니다.

  • 초기 이미지의 채널 개수는 네트워크의 이미지 입력 계층의 채널 개수와 일치해야 합니다.

초기 이미지를 지정하지 않은 경우, 표준 정규분포에서 가져온 픽셀로 구성된 임의의 이미지가 사용됩니다. '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를 사용할 수 있으면 GPU를 사용하고 그렇지 않으면 CPU를 사용합니다.

  • 'gpu' — GPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox™와 CUDA® 지원 NVIDIA® GPU(Compute Capability 3.0 이상)가 필요합니다. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.

  • 'cpu' — CPU를 사용합니다.

예: 'ExecutionEnvironment','cpu'

출력 인수

모두 축소

출력 이미지로, 4차원 배열에 저장된 회색조 또는 트루컬러(RGB) 이미지로 구성된 시퀀스로 지정됩니다. 이미지는 channels(k)의 출력값을 최대화하는 이미지가 I(:,:,:,k)가 되도록 I의 네 번째 차원을 따라 결합됩니다. 출력 이미지는 imshow를 사용하여 표시할 수 있습니다.

알고리즘

이 함수는 다중 해상도 이미지 피라미드와 라플라스 피라미드 기울기 정규화를 사용하여 고해상도 이미지를 생성하는 딥 드림 시각화를 구현합니다. 라플라스 피라미드 기울기 정규화에 대한 자세한 내용은 이 블로그 게시물을 참조하십시오. DeepDreaming with TensorFlow.

Deep Learning Toolbox™에 포함된 심층 학습 훈련, 예측 및 검증을 위한 모든 함수는 단정밀도 부동소수점 산술을 사용하여 계산을 수행합니다. 심층 학습을 위한 함수에는 trainNetwork, predict, classify, activations가 있습니다. CPU와 GPU를 모두 사용하여 네트워크를 훈련시키는 경우, 단정밀도 산술이 사용됩니다.

참고 문헌

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

R2017a에 개발됨