Back to challenges
Easy 0 solved 0% acceptance

Activation Functions

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

What you'll learn

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

Problem

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.

Constraints

1 ≤ length of values ≤ 1,000

-50 ≤ each value ≤ 50

Examples

Example 1
Input:
name = "sigmoid"
values = [0.0, 2.0, -2.0]

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

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

Expected output:
double[] expected = new double[] {0.5, 0.880797, 0.119203};

Explanation

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.

Example 2
Input:
name = "relu"
values = [-1.5, 0.0, 3.0]

Expected output:
expected = [0.0, 0.0, 3.0]
Input:
std::string name = "relu";
std::vector<double> values = {-1.5, 0.0, 3.0};

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

Expected output:
double[] expected = new double[] {0.0, 0.0, 3.0};

Explanation

ReLU keeps positive values and turns negative values into 0: [0, 0, 3].

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

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

Hint 2

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

Hint 3

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

Expected complexity

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

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.