00001 #ifndef __RBFHIDDENLAYER_H 00002 #define __RBFHIDDENLAYER_H 00003 00004 #include <Vector.hpp> 00005 #include <GNGComponents/DefaultGNGContainer.hpp> 00006 00007 #include "RBFNode.hpp" 00008 00009 #include "IWeightLayerToHidden.hpp" 00010 00011 00015 class RBFHiddenLayer : public DefaultGNGContainer 00016 { 00017 public: 00018 RBFHiddenLayer(IWeightLayerToHidden * w) 00019 { 00020 m_weightLayer = w; 00021 } 00022 00027 virtual void ApplyInput(Vector const & input) 00028 { 00029 // iterate through all nodes and calc their Activation 00030 NodeContainer::iterator it = m_nodes.begin(); 00031 for(; it != m_nodes.end(); it++) 00032 { 00033 RBFNode * n = (RBFNode *)(*it); 00034 m_weightLayer->SetSignal(n, n->Activation(input)); 00035 } 00036 } 00037 00043 GNGNode * CreateNode() 00044 { 00045 GNGNode * node = m_nodeFactory->NewNode(); 00046 m_nodes.push_back(node); 00047 00048 // Create a Weights Object in WeightLayer, associate it with n. 00049 RBFNode * n = (RBFNode *)node; 00050 m_weightLayer->CreateWeightsObject(n); 00051 00052 return node; 00053 } 00054 00061 void DeleteNode(NodeContainer::iterator & i) 00062 { 00063 RBFNode * n = (RBFNode *)(*i); 00064 m_weightLayer->DeleteWeightsObject(n); 00065 00066 delete (*i); // free memory 00067 m_nodes.erase(i); // remove reference. 00068 } 00069 00070 private: 00071 IWeightLayerToHidden * m_weightLayer; 00072 }; 00073 00074 00075 #endif