Contenido principal

Comprobar salidas de funciones aceleradas de deep learning

En este ejemplo se muestra cómo comprobar que las salidas de funciones aceleradas coinciden con las salidas de la función subyacente.

En algunos casos, las salidas de funciones aceleradas difieren de las salidas de la función subyacente. Por ejemplo, debe tener cuidado cuando acelere funciones que usan generación de números aleatorios, como una función que genera ruido aleatorio para añadirlo a la entrada de la red. Cuando se almacena en caché el rastreo de una función que genera números aleatorios que no son objetos dlarray, la función acelerada se almacena en caché, lo que genera como resultado números aleatorios en el rastreo. Cuando se reutiliza el rastreo, la función acelerada usa los valores aleatorios almacenados en caché. La función acelerada no genera nuevos valores aleatorios.

Para comprobar que las salidas de la función acelerada coinciden con las salidas de la función subyacente, utilice la propiedad CheckMode de la función acelerada. Cuando la propiedad CheckMode de la función acelerada es 'tolerance' y las salidas difieren en más de una tolerancia especificada, la función acelerada genera una advertencia.

Acelere la función myUnsupportedFun, que se enumera al final del ejemplo, usando la función dlaccelerate. La función myUnsupportedFun genera ruido aleatorio y lo añade a la entrada. Esta función no admite la aceleración porque la función genera números aleatorios que no son objetos dlarray.

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

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

Borre cualquier rastreo almacenado previamente en caché usando la función clearCache.

clearCache(accfun)

Para comprobar que las salidas de rastreos almacenados en caché reutilizados coinciden con las salidas de la función subyacente, establezca la propiedad CheckMode en 'tolerance'.

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

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

Evalúe la función acelerada con un arreglo de unos como entrada, especificada como una entrada 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

Evalúe la función acelerada de nuevo con la misma entrada. Dado que la función acelerada reutiliza los valores de ruido aleatorios almacenados en caché en lugar de generar valores aleatorios nuevos, las salidas del rastreo reutilizado difieren de las salidas de la función subyacente. Cuando la propiedad CheckMode de la función acelerada es 'tolerance' y las salidas difieren, la función acelerada genera una advertencia.

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

La generación de números aleatorios usando la opción 'like' de la función rand con un objeto dlarray admite la aceleración. Para utilizar la generación de números aleatorios en una función acelerada, asegúrese de que la función usa la función rand con la opción 'like' establecida en un objeto dlarray rastreado (un objeto dlarray que depende de un objeto dlarray de entrada).

Acelere la función mySupportedFun, que se enumera al final del ejemplo. La función mySupportedFun añade ruido a la entrada generando ruido utilizando la opción 'like' con un objeto dlarray rastreado.

accfun2 = dlaccelerate(@mySupportedFun);

Borre cualquier rastreo almacenado previamente en caché usando la función clearCache.

clearCache(accfun2)

Para comprobar que las salidas de rastreos almacenados en caché reutilizados coinciden con las salidas de la función subyacente, establezca la propiedad CheckMode en 'tolerance'.

accfun2.CheckMode = 'tolerance';

Evalúe la función acelerada dos veces con la misma entrada que antes. Dado que las salidas de la memoria caché reutilizada coinciden con las salidas de la función subyacente, la función acelerada no genera una advertencia.

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

Comprobar la coincidencia de las salidas requiere más procesamiento y aumenta el tiempo necesario para la evaluación de funciones. Después de comprobar las salidas, establezca la propiedad CheckMode en 'none'.

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

Funciones de ejemplo

La función myUnsupportedFun genera ruido aleatorio y lo añade a la entrada. Esta función no admite la aceleración porque la función genera números aleatorios que no son objetos dlarray.

function out = myUnsupportedFun(dlX)

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

end

La función mySupportedFun añade ruido a la entrada generando ruido utilizando la opción 'like' con un objeto dlarray rastreado.

function out = mySupportedFun(dlX)

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

end

Consulte también

| | | | |

Temas