#c #neural-network #trigonometry #complex-numbers
#c #нейронная сеть #тригонометрия #комплексные числа
Вопрос:
Мне нужно реализовать многослойный персептрон с использованием алгоритма Левенберга — Марквардта. Чтобы найти наклон функции активации (tanh), необходимо вычислить производную от tanhx = sec ^ 2 hx haas. Есть ли какая-либо библиотечная функция в c для вычисления sec ^ 2 hx.
Заранее спасибо.
Ответ №1:
Стандартная библиотека предоставляет гиперболические функции синуса, косинуса и тангенса; другие гиперболические функции могут быть получены из них:
#include <cmath>
double sech2(double x) {
double sh = 1.0 / std::cosh(x); // sech(x) == 1/cosh(x)
return sh*sh; // sech^2(x)
}
Ответ №2:
Для тех, кого привел сюда Google… было бы безопаснее использовать tanh (x) вместо cosh(x), чтобы избежать переполнения.
#include <cmath>
double sech2(const double x) {
double th = tanh(x); // tanh(x) in (-1,1); cosh(x) in (1,inf)
return 1.0 - th*th; // sech^2(x) = 1 - tanh^2(x)
}
Ответ №3:
#include <cmath>
inline double sec_sq(double x) {
double cosx = std::cos(x);
return 1.0 / (cosx*cosx);
}