#include "./BackPropagation" NeuralNetwork::Learning::BackPropagation::~BackPropagation() { if(deltas!=nullptr) { for(size_t i=0;i& expectation) { if(deltas==nullptr) { deltas=new float*[network.size()]; for(size_t i=0;i0;i--) { if(allowThreads) { std::vector th; size_t s=0; //TODO THIS IS NOT WORKING!!! #define THREADS 4 int step =network[i].size()/THREADS; for(int t=1;t<=THREADS;t++) { if(s>=network[i].size()) break; th.push_back(std::thread([&i,this](size_t from, size_t to)->void{ for(size_t j=from;jnetwork[i+1].size();k++) { deltasWeight+=deltas[i+1][k]*this->network[i+1][k].getWeight(j); } //deltas[i][j]*=this->network[i]->operator[](j)->derivatedOutput(); // WHY THE HELL IS SEQ here?? } },s,t==THREADS?network[i].size():s+step));//{} s+=step; } for (auto& thr : th) thr.join(); }else { for(size_t j=0;jnetwork[i+1].size();k++) { deltasWeight+=deltas[i+1][k]*this->network[i+1][k].getWeight(j); } deltas[i][j]=deltasWeight*this->network[i][j].derivatedOutput(); } } } for(size_t i=1;i& p, const std::vector& solution) { std::vector a=network.solve(p); double error=calculateError(solution,a); std::vector s; if(noise) { for(size_t i=0;i