가속화된 딥러닝 함수의 출력값 검사하기
이 예제에서는 가속화된 함수의 출력값이 기본 함수의 출력값과 일치하는지 검사하는 방법을 보여줍니다.
경우에 따라 가속화된 함수의 출력값이 기본 함수의 출력값과 다를 수 있습니다. 예를 들어, 랜덤 잡음을 생성해서 신경망 입력값에 더하는 함수처럼 난수 생성을 사용하는 함수를 가속화할 때는 주의해야 합니다. 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
참고 항목
dlaccelerate
| AcceleratedFunction
| clearCache
| dlarray
| dlgradient
| dlfeval