Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Funciones de activación

Aplica sigmoide, ReLU, Leaky ReLU o tanh a cada valor de una lista.

Lo que aprenderás

  • Implementar las funciones de activación más comunes
  • Entender por qué las redes necesitan no linealidad
  • Evitar el desbordamiento en la sigmoide

Problema

Ver original (inglés)

Después de que una neurona suma sus entradas ponderadas, una función de activación decide su salida. Sin ella, una red neuronal solo podría aprender líneas rectas.

Implementa activate(name, values) y aplica la función indicada a cada valor:

namefórmula
"sigmoid"1 / (1 + e^(-x))
"relu"max(0, x)
"leaky_relu"x si x > 0, si no 0.01 × x
"tanh"(e^x - e^(-x)) / (e^x + e^(-x))

Entrada

name: Uno de "sigmoid", "relu", "leaky_relu" o "tanh".

values: Una lista de números.

Salida

Devuelve una lista con la activación aplicada a cada valor, en el mismo orden.

Restricciones

1 ≤ longitud de values ≤ 1000

-50 ≤ cada valor ≤ 50

Ejemplos

Ejemplo 1
Entrada:
name = "sigmoid"
values = [0.0, 2.0, -2.0]

Salida esperada:
expected = [0.5, 0.880797, 0.119203]
Entrada:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0, -2.0};

Salida esperada:
std::vector<double> expected = {0.5, 0.880797, 0.119203};
Entrada:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0, -2.0};

Salida esperada:
double[] expected = new double[] {0.5, 0.880797, 0.119203};

Explicación

sigmoid(0) = 1 / (1 + 1) = 0.5, sigmoid(2) ≈ 0.880797 y sigmoid(-2) ≈ 0.119203. La sigmoide comprime cualquier número en el rango de 0 a 1.

Ejemplo 2
Entrada:
name = "relu"
values = [-1.5, 0.0, 3.0]

Salida esperada:
expected = [0.0, 0.0, 3.0]
Entrada:
std::string name = "relu";
std::vector<double> values = {-1.5, 0.0, 3.0};

Salida esperada:
std::vector<double> expected = {0.0, 0.0, 3.0};
Entrada:
string name = "relu";
double[] values = new double[] {-1.5, 0.0, 3.0};

Salida esperada:
double[] expected = new double[] {0.0, 0.0, 3.0};

Explicación

ReLU conserva los valores positivos y convierte los negativos en 0: [0, 0, 3].

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.