К списку задач
Легко Решено: 0 Процент решений: 0%

Функции активации

Примените sigmoid, ReLU, Leaky ReLU или tanh к каждому значению списка.

Чему вы научитесь

  • Реализовывать распространённые функции активации
  • Понять, зачем сетям нелинейность
  • Избегать переполнения в сигмоиде

Условие

После того как нейрон сложил взвешенные входы, его выход определяет функция активации. Без неё нейронная сеть могла бы выучить только прямые линии.

Реализуйте activate(name, values) и примените указанную функцию к каждому значению:

nameформула
"sigmoid"1 / (1 + e^(-x))
"relu"max(0, x)
"leaky_relu"x, если x > 0, иначе 0.01 × x
"tanh"(e^x - e^(-x)) / (e^x + e^(-x))

Входные данные

name: одно из "sigmoid", "relu", "leaky_relu" или "tanh".

values: список чисел.

Выходные данные

Верните список, где функция активации применена к каждому значению, в том же порядке.

Ограничения

1 ≤ длина values ≤ 1000

-50 ≤ каждое значение ≤ 50

Примеры

Пример 1
Ввод:
name = "sigmoid"
values = [0.0, 2.0, -2.0]

Ожидаемый вывод:
expected = [0.5, 0.880797, 0.119203]
Ввод:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0, -2.0};

Ожидаемый вывод:
std::vector<double> expected = {0.5, 0.880797, 0.119203};
Ввод:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0, -2.0};

Ожидаемый вывод:
double[] expected = new double[] {0.5, 0.880797, 0.119203};

Пояснение

sigmoid(0) = 1 / (1 + 1) = 0.5, sigmoid(2) ≈ 0.880797 и sigmoid(-2) ≈ 0.119203. Сигмоида сжимает любое число в диапазон от 0 до 1.

Пример 2
Ввод:
name = "relu"
values = [-1.5, 0.0, 3.0]

Ожидаемый вывод:
expected = [0.0, 0.0, 3.0]
Ввод:
std::string name = "relu";
std::vector<double> values = {-1.5, 0.0, 3.0};

Ожидаемый вывод:
std::vector<double> expected = {0.0, 0.0, 3.0};
Ввод:
string name = "relu";
double[] values = new double[] {-1.5, 0.0, 3.0};

Ожидаемый вывод:
double[] expected = new double[] {0.0, 0.0, 3.0};

Пояснение

ReLU сохраняет положительные значения и превращает отрицательные в 0: [0, 0, 3].

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Каждая активация применяется независимо к каждому числу, так что сосредоточьтесь на одном значении за раз.

Подсказка 2

Используйте формулу, соответствующую заданному имени, и постройте новый список из результатов.

Подсказка 3

Будьте осторожны с отрицательными входами, особенно для ReLU и наклона на неположительной стороне в leaky.

Ожидаемая сложность

время O(n), доп. память O(n)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.