주요 콘텐츠

가속화된 딥러닝 함수의 출력값 검사하기

이 예제에서는 가속화된 함수의 출력값이 기본 함수의 출력값과 일치하는지 검사하는 방법을 보여줍니다.

경우에 따라 가속화된 함수의 출력값이 기본 함수의 출력값과 다를 수 있습니다. 예를 들어, 랜덤 잡음을 생성해서 신경망 입력값에 더하는 함수처럼 난수 생성을 사용하는 함수를 가속화할 때는 주의해야 합니다. dlarray 객체가 아닌 난수를 생성하는 함수의 추적을 캐시할 경우, 가속화된 함수는 생성된 난수를 추적에 캐시합니다. 가속화된 함수가 이 추적을 재사용할 때는 캐시된 난수 값을 사용합니다. 가속화된 함수는 새 난수 값을 생성하지 않습니다.

가속화된 함수의 출력값이 기본 함수의 출력값과 일치하는지 검사하려면, 가속화되는 함수의 CheckMode 속성을 사용하십시오. 가속화된 함수의 CheckMode 속성이 'tolerance'이고 출력값이 지정된 허용오차보다 더 차이가 날 경우 가속화된 함수는 경고를 발생시킵니다.

dlaccelerate 함수를 사용하여 이 예제의 마지막에 나오는 함수 myUnsupportedFun을 가속화합니다. 함수 myUnsupportedFun은 랜덤 잡음을 생성하여 입력값에 더합니다. 이 함수는 dlarray 객체가 아닌 난수를 생성하므로 가속화를 지원하지 않습니다.

accfun = dlaccelerate(@myUnsupportedFun)
accfun = 
  AcceleratedFunction with properties:

          Function: @myUnsupportedFun
           Enabled: 1
         CacheSize: 50
           HitRate: 0
         Occupancy: 0
         CheckMode: 'none'
    CheckTolerance: 1.0000e-04

clearCache 함수를 사용하여 이전에 캐시된 추적을 지웁니다.

clearCache(accfun)

캐시된 추적을 재사용한 경우의 출력값이 기본 함수의 출력값과 일치하는지 검사하기 위해 CheckMode 속성을 'tolerance'로 설정합니다.

accfun.CheckMode = 'tolerance'
accfun = 
  AcceleratedFunction with properties:

          Function: @myUnsupportedFun
           Enabled: 1
         CacheSize: 50
           HitRate: 0
         Occupancy: 0
         CheckMode: 'tolerance'
    CheckTolerance: 1.0000e-04

1로 이루어진 배열을 dlarray 입력값으로 지정하여 가속화된 함수를 실행합니다.

dlX = dlarray(ones(3,3));
dlY = accfun(dlX)
dlY = 
  3×3 dlarray

    1.8147    1.9134    1.2785
    1.9058    1.6324    1.5469
    1.1270    1.0975    1.9575

동일한 입력값을 지정하여 가속화된 함수를 다시 실행합니다. 가속화된 함수가 새 난수 값을 생성하는 대신 캐시된 랜덤 잡음 값을 재사용하므로 추적을 재사용한 출력값이 기본 함수의 출력값과 다릅니다. 가속화된 함수의 CheckMode 속성이 'tolerance'이고 출력값이 서로 다르면, 가속화된 함수는 경고를 발생시킵니다.

dlY = accfun(dlX)
Warning: Accelerated outputs differ from underlying function outputs.
dlY = 
  3×3 dlarray

    1.8147    1.9134    1.2785
    1.9058    1.6324    1.5469
    1.1270    1.0975    1.9575

dlarray 객체에 'like' 옵션을 지정하여 rand 함수를 사용해서 난수를 생성하면 가속화가 지원됩니다. 가속화된 함수에서 난수 생성을 사용하려면, 해당 함수는 추적되는 dlarray 객체(입력 dlarray 객체에 종속되는 dlarray 객체)에 'like' 옵션을 지정하여 rand 함수를 사용해야 합니다.

이 예제의 마지막에 나오는 함수 mySupportedFun을 가속화합니다. 함수 mySupportedFun은 추적되는 dlarray 객체에 'like' 옵션을 사용하여 잡음을 생성하고 입력값에 잡음을 더합니다.

accfun2 = dlaccelerate(@mySupportedFun);

clearCache 함수를 사용하여 이전에 캐시된 추적을 지웁니다.

clearCache(accfun2)

캐시된 추적을 재사용한 경우의 출력값이 기본 함수의 출력값과 일치하는지 검사하기 위해 CheckMode 속성을 'tolerance'로 설정합니다.

accfun2.CheckMode = 'tolerance';

앞에서와 동일한 입력값을 지정하여 가속화된 함수를 두 번 실행합니다. 캐시를 재사용한 출력값이 기본 함수의 출력값과 일치하므로 가속화된 함수는 경고를 발생시키지 않습니다.

dlY = accfun2(dlX)
dlY = 
  3×3 dlarray

    1.7922    1.0357    1.6787
    1.9595    1.8491    1.7577
    1.6557    1.9340    1.7431

dlY = accfun2(dlX)
dlY = 
  3×3 dlarray

    1.3922    1.7060    1.0462
    1.6555    1.0318    1.0971
    1.1712    1.2769    1.8235

출력값이 일치하는지 검사하려면 추가 처리가 필요하며 함수 실행에 필요한 시간이 늘어납니다. 출력값을 검사한 후에는 CheckMode 속성을 'none'으로 설정합니다.

accfun1.CheckMode = 'none';
accfun2.CheckMode = 'none';

예제 함수

함수 myUnsupportedFun은 랜덤 잡음을 생성하여 입력값에 더합니다. 이 함수는 dlarray 객체가 아닌 난수를 생성하므로 가속화를 지원하지 않습니다.

function out = myUnsupportedFun(dlX)

sz = size(dlX);
noise = rand(sz);
out = dlX + noise;

end

함수 mySupportedFun은 추적되는 dlarray 객체에 'like' 옵션을 사용하여 잡음을 생성하고 입력값에 잡음을 더합니다.

function out = mySupportedFun(dlX)

sz = size(dlX);
noise = rand(sz,'like',dlX);
out = dlX + noise;

end

참고 항목

| | | | |

도움말 항목