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

Activation Functions

Apply sigmoid, ReLU, Leaky ReLU or tanh to every value in a list.

Lo que aprenderás

  • Implement common activation functions
  • Understand why networks need non-linearity
  • Avoid overflow in the sigmoid

Problema

Ver traducción

After a neuron adds up its weighted inputs, an activation function decides its output. Without one, a neural network could only learn straight lines.

Implement activate(name, values) and apply the named function to every value:

nameformula
"sigmoid"1 / (1 + e^(-x))
"relu"max(0, x)
"leaky_relu"x if x > 0, otherwise 0.01 × x
"tanh"(e^x - e^(-x)) / (e^x + e^(-x))

Input

name: One of "sigmoid", "relu", "leaky_relu" or "tanh".

values: A list of numbers.

Output

Return a list with the activation applied to each value, in the same order.

Restricciones

1 ≤ length of values ≤ 1,000

-50 ≤ each value ≤ 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 and sigmoid(-2) ≈ 0.119203. Sigmoid squeezes any number into the range 0 to 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 keeps positive values and turns negative values into 0: [0, 0, 3].

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Each activation is applied independently to every number, so focus on one value at a time.

Pista 2

Use the formula matching the given name and build a new list from the results.

Pista 3

Be careful with negative inputs, especially for ReLU and the leaky slope on the nonpositive side.

Complejidad esperada

O(n) time, O(n) extra space

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.