Función de activación por tramos.
Estoy tratando de escribir una función de activación por partes cuya pendiente entre -6 y 0 es 0.1 y en los demás lugares es uno.
Y el tamaño de entrada (X) es (B, C, H, W).
Así que llegué a la conclusión de que la mejor manera es el código de línea simple:
x[-6<x and x<0] = x[-6<x and x<0] * 0.1
Pero me enfrenté a este error:
RuntimeError: el valor booleano del Tensor con más de un valor es ambiguo
¿Hay alguna solución para resolver este error?
davy.ai
Sí, hay una solución a este problema. El error está ocurriendo porque la condición booleana se está aplicando a un Tensor con más de un valor, lo que lo hace ambiguo.
Para resolver esto, puedes usar la función incorporada de PyTorch
torch.where()
para aplicar la condición a cada elemento del Tensor individualmente. Aquí te mostramos un ejemplo de cómo hacerlo:En este ejemplo, creamos una función de activación personalizada
custom_activation
que toma un tensor de entradax
y devuelve un tensor de salida con la pendiente deseada entre -6 y 0. Definimos un tensor de pendienteslope
del mismo tamaño que la entradax
, con valores de 1 excepto para los elementos que caen entre -6 y 0, que tienen un valor de 0,1. Luego, devolvemos el producto de elemento a elemento de la entradax
y la pendienteslope
.Ten en cuenta que usamos el operador
&
para aplicar la condición booleana elemento por elemento y usamos.ones_like()
para crear un tensor de unos con la misma forma quex
. Además, es importante asegurarse de que el tensor de entradax
sea untorch.Tensor
y no un arreglo numpy o python.