Russian Qt Forum
Апрель 26, 2024, 20:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: нейронная сеть и потоки  (Прочитано 9778 раз)
dimka8ya
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« : Март 18, 2021, 00:16 »

Доброго времени суток. я сделал нейронную сеть на QVector<QVector<QVector<double>>> веса; и QVector<Qvector<double>> активированные выходы; , все это работает в одном потоке ,но так медленнннноооо .как я понимаю самые трмоза в математических расчетах сигмоиды и вес * актив.выход . с потоками не разу дело не имел , то что видел в инете - это создаем поток и выводим в терминал . как можно создать параллельные потоки и дождатся их равершения и только потом переходить на следующий слой . у меня Linux , если я правильно понимаю ,то можно создать хоть 10000 потоков и Ось с ними разберется и передаст управление основному потоку ( здесь я могу ошибаться из-за своей безграмотности ). может у кого есть пример похожий на мою проблему или как это можно решить ? спасибо за понимание  Смеющийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #1 : Март 18, 2021, 02:22 »

Может тормозить из-за Copy-On-Write, попробуйте std::vector
Записан
dimka8ya
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« Ответ #2 : Март 18, 2021, 09:27 »

QVector и std::vector особой разницы нет . тут именно математика числа double и возведение в степень .
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 18, 2021, 09:55 »

Перед тем как копать/оптимизировать неплохо убедиться что задача вообще "разпоточивается". Это ларчик может просто "не открываться"
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #4 : Март 18, 2021, 11:53 »

1. 10000 потоков создать можно, но из за конкуренции между ними, работать быстрее не станет. Кол-во потоков выставляй кол-ву ядер процессора, в этом случае будет прирост, дальше либо без прироста скорости либо тормоза.
2. Можешь выносить вычисления по нейрону в QtConcurrent например, он возьмет поток из готового пула и отдаст ему расчет, создавай по QtConcurrent на вычисление. Когда все QtConcurrent завершились переходишь к следующему слою. В этом случае у тебя часть нейронов будут считаться в одном потоке, часть в другом и т.д. Не больше тредов чем кол-во ядер, насколько помню.
3. На CPU считать нейросети крайне затратная вещь. Не предназначен он для этого. Если это баловство с сетками или задача в универе, тогда вопросов нет. Иначе подрубай GPU для расчета.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Март 18, 2021, 12:13 »

Иначе подрубай GPU для расчета.
Какой "бодрый" совет Улыбающийся Интересно каким образом его "подрубать"? (давеча создавал похожую тему)
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #6 : Март 18, 2021, 12:19 »

Цитировать
как я понимаю самые трмоза в математических расчетах сигмоиды и вес * актив.выход .
Нет, дело не в этом.
Как у вас back propagation error происходит/реализовано?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
dimka8ya
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« Ответ #7 : Март 18, 2021, 12:29 »

все очень просто
Код:
std::thread t( [=]{
 for( int i=0; i<argc; ++i )
 std::cout << argv[i] << “\n”;
 });
 t.join();
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #8 : Март 18, 2021, 12:31 »

все очень просто
Код:
std::thread t( [=]{
 for( int i=0; i<argc; ++i )
 std::cout << argv[i] << “\n”;
 });
 t.join();

Это что за..?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #9 : Март 18, 2021, 12:37 »

Судя по коду имеет смысл почитать про треды для начала )))) У вас тут не будет "параллельной" работы.
Записан
dimka8ya
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« Ответ #10 : Март 18, 2021, 12:49 »

Судя по коду имеет смысл почитать про треды для начала )))) У вас тут не будет "параллельной" работы.
согласен . многопоточности нет
Записан
dimka8ya
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« Ответ #11 : Март 18, 2021, 13:04 »

Код:
void do_work(unsigned id);
void f()
{
  std::vector<std::thread> threads;
  for(unsigned i=0;i<20;++i)
     {
      threads.push_back(std::thread(do_work,i));
     }
  std::for_each(threads.begin(),threads.end(),std::mem_fn(&std::thread::join));
}
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #12 : Март 18, 2021, 23:33 »

Код:
for (auto &thread: threads)
    thread.join();
[code]
[/code]
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #13 : Март 19, 2021, 10:41 »

ТС, у тебя задача какая? Побаловаться с нейронками или что то в прод. сделать?
Записан
dimka8ya
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« Ответ #14 : Март 19, 2021, 17:01 »

все только для личного пользования . GPU нет , и покупать новый ПК нет желания .  есть ноут 8и ядерный и сейчас думаю как разделить переменное количество нейронов в слое(от 1 до бесконечности) на 7 дополнительных потоков. пробовал разные библиотеки и у всех одна проблема ,нейрон в виде классов ,а это сжирает оперативку и мусор ненужный . вместо сигмоиды пробовал другие активации нейрона , получается усереднение ошибки ( сигмоида ошибка 0.03 , а другие доходили только до 0.14 ) . экспериментировал целый месяц и выводил ошибки на график QCuctom Plot  и пришол к итогу который у меня сейчас . нужно только решить с скоростью обучения сети , так как сеть нужно переучивать постоянно ( мои личные эксперименты и тараканы ) . с моим количеством слоев и нейронов в слое на обучение уходит 2е суток в 1 поток , сеть не стандартная .
« Последнее редактирование: Март 19, 2021, 17:28 от dimka8ya » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.063 секунд. Запросов: 22.