sigmoid(x) = 1 / (1 + exp(-x))
VS
sin(x)
C/C++
Что требует меньше вычислительной мощности — сигмоида или синус?
Это зависит от конкретных реализаций этих функций. Можно запустить, например, такую программу:
#include <ctime>
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
double r()
{
return 1400.-700.*rand()/RAND_MAX;
}
double sigmoid(double x)
{ return 1. / (1. + exp(-x)); }
int main()
{
int n, told, tnew;
double *a = new double[100000000];
told = time(nullptr);
srand(told);
for (n = 0; n < 100000000; n++) a[n] = r();
tnew = time(nullptr);
cout << tnew - told << ' ';
told = tnew;
for (n = 0; n < 100000000; n++) sigmoid(a[n]);
tnew = time(nullptr);
cout << tnew - told << ' ';
for (n = 0; n < 100000000; n++) sin(a[n]);
cout << time(nullptr) - tnew << endl;
return 0;
}
Здесь вычисляются две функции от одинаковых аргументов. У меня на смартпэде массив случайных аргументов формируется 6 секунд, сигмоиды вычисляются 8 секунд, а синусы доли секунды.
#include <ctime>
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
double r()
{
return 1400.-700.*rand()/RAND_MAX;
}
double sigmoid(double x)
{ return 1. / (1. + exp(-x)); }
int main()
{
int n, told, tnew;
double *a = new double[100000000];
told = time(nullptr);
srand(told);
for (n = 0; n < 100000000; n++) a[n] = r();
tnew = time(nullptr);
cout << tnew - told << ' ';
told = tnew;
for (n = 0; n < 100000000; n++) sigmoid(a[n]);
tnew = time(nullptr);
cout << tnew - told << ' ';
for (n = 0; n < 100000000; n++) sin(a[n]);
cout << time(nullptr) - tnew << endl;
return 0;
}
Здесь вычисляются две функции от одинаковых аргументов. У меня на смартпэде массив случайных аргументов формируется 6 секунд, сигмоиды вычисляются 8 секунд, а синусы доли секунды.
Петраков Павел
мне интересны те что используются в оптимизированных библиотеках типа numpy. Огромное спасибо за информацию
Насколько я помню, синус и экспонента реализованы аппаратно в математическом сопроцессоре. Поэтому один май.
Если считать по Тейлору, то синус при схожей точности будет в 2 раза быстрее.
Если будет очень много вычислений, то в твоем случае к экспоненте добавляется время на математические операции (тоже через сопроцессор), и синус будет быстрее раз в 10.
Если считать по Тейлору, то синус при схожей точности будет в 2 раза быстрее.
Если будет очень много вычислений, то в твоем случае к экспоненте добавляется время на математические операции (тоже через сопроцессор), и синус будет быстрее раз в 10.
предлагаю взять конкретные реализации сигмоиды с синусом и побенчмаркать
по сути там в обоих случаях будут ряды тейлора плюс какие-то приближения и оптимизации для частных случаев
я бы ставил на то, что экспонента (сигмоида) будет чуть жирнее, т.к. она не периодическая и чуть медленнее сходится
по сути там в обоих случаях будут ряды тейлора плюс какие-то приближения и оптимизации для частных случаев
я бы ставил на то, что экспонента (сигмоида) будет чуть жирнее, т.к. она не периодическая и чуть медленнее сходится
Похожие вопросы
- Код должен находить наименьшее число в массиве, но это всегда почему то 0. Где ошибка?
- Помогите с обработкой исключений. Как описать исключение того, что длины сторон треугольника не меньше 0?
- Если в каждой строке матрицы наименьшие К чисел образуют одно и то же множество
- Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел. с++
- Как выучить язык программирования если мало времени на изучении( некогда)
- Для массива а(к) найти наименьшее значение pазности между pядом стоящими эле-ментами.
- Как именно скорость запуска команды влияет на производительность, время выполнения важно меньше чем быстрый запуск?
- Объединение и использование вычислительной мощности в ПК
- Вычислительная мощность при Майнинген.
- Почему мощность суперкомпьютера размером с небоскрёб по вычислительной мощности сравнима с мозгом комара?