#pragma once #include #include #include #include "BackPropagation.h" namespace NeuralNetwork { namespace Learning { /** @class QuickPropagation * @brief */ class QuickPropagation : public BackPropagation { public: inline QuickPropagation(FeedForward::Network &feedForwardNetwork, CorrectionFunction::CorrectionFunction *correction = new CorrectionFunction::Linear()): BackPropagation(feedForwardNetwork,correction),deltasPrev() { resize(); } virtual ~QuickPropagation() { } protected: virtual inline void resize() override { if(deltas.size()!=network.size()) deltas.resize(network.size()); for(std::size_t i=0; i < network.size(); i++) { if(deltas[i].size()!=network[i].size()) deltas[i].resize(network[i].size()); } if(deltasPrev.size()!=network.size()) deltasPrev.resize(network.size()); for(std::size_t i=0; i < network.size(); i++) { if(deltasPrev[i].size()!=network[i].size()) deltasPrev[i].resize(network[i].size()); for(std::size_t j=0; j < deltasPrev[i].size(); j++) { deltasPrev[i][j]=1.0; } } } virtual void updateWeights(const std::vector &input) override; std::vector> deltasPrev; }; } }