Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

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 객체 또는 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를 사용합니다.

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

  • 신경망의 끝부분에 있는 계층의 경우, 초기 영상은 영상 입력 계층과 높이와 너비가 최소한 같아야 합니다.

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

  • 초기 영상의 채널 개수는 신경망의 영상 입력 계층의 채널 개수와 일치해야 합니다.

초기 영상을 지정하지 않은 경우, 표준 정규분포에서 가져온 픽셀로 구성된 임의의 영상이 사용됩니다. '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의 네 번째 차원을 따라 결합됩니다. 출력 영상은 imshow (Image Processing Toolbox)를 사용하여 표시할 수 있습니다.

알고리즘

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

trainnet 또는 trainNetwork 함수를 사용하여 신경망을 훈련시키거나 DAGNetwork 객체 및 SeriesNetwork 객체와 함께 예측 함수 또는 검증 함수를 사용할 때 소프트웨어는 단정밀도 부동소수점 연산방식을 사용하여 이러한 계산을 수행합니다. 예측 및 검증을 위한 함수는 predict, classify, activations 등이 있습니다. CPU와 GPU를 모두 사용하여 신경망을 훈련시키는 경우, 단정밀도 연산방식이 사용됩니다.

참고 문헌

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

버전 내역

R2017a에 개발됨