/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /* * File: Stack.hpp * Author: jens * * Created on 25. Oktober 2019, 18:26 */ #ifndef STACK_HPP #define STACK_HPP #include #include #include #include #include "Layer.hpp" class LayerConstructor { public: LayerConstructor() {} virtual ~LayerConstructor() {} virtual Layer* onConstruct(const std::string &name, size_t id, size_t numVisibleX, size_t numVisibleY, size_t numHidden, size_t numContext) { return nullptr; } }; class Stack { public: Stack(const std::string &dir, const std::string &name); Stack(const Stack& orig); virtual ~Stack(); void setName(const std::string &name); size_t numLayers(); void addLayer(Layer *pLayer); void delLayer(Layer *pLayer); Layer* getLayer(size_t layerId) const; void train(Rbm::IListener* pListener); bool load(LayerConstructor *pLayerConstructor=nullptr); bool save(); void weightsInit(double stddev); bool loadWeights(); bool saveWeights(); size_t numTraining(); void addTraining(const arma::mat &toAdd); void delTraining(int index); size_t loadTrainingBatch(bool doNormalize=false); size_t saveTrainingBatch(); arma::mat& trainingBatch(); arma::mat trainingBatch(Layer *pLayer); private: std::string m_dir; std::string m_name; Layer *m_pLayers; arma::mat m_trainingBatch; }; #endif /* STACK_HPP */