#include "cuCompDisc.h" #include "cuNetwork.h" #include "Error.h" #include namespace TNet { void CuDiscrete:: Propagate() { for (int i=0;iSetInput(GetInput(i),inID[i].pos); for (int i=0; iPropagate(); mOutput.Init(GetOutput()); } void CuDiscrete:: PropagateFnc(const CuMatrix& X, CuMatrix& Y) { Error("Not applicable"); } void CuDiscrete:: Backpropagate() { for (int i=0;iSetErrorInput(GetErrorInput(i),outID[i].pos); for(int i=0; iBackpropagate(); mErrorOutput.Init(GetErrorOutput()); } void CuDiscrete:: BackpropagateFnc(const CuMatrix& X, CuMatrix& Y) { Error("Not applicable"); } void CuDiscrete:: Update() { for(int i=0; iIsUpdatable() ) { CuUpdatableComponent& rComp = dynamic_cast(*mBlocks[i]); rComp.Update(); } } void CuDiscrete:: ReadFromStream(std::istream& rIn) { int i; for(i=0; iGetInSect());++j) inID.push_back(posID(i,j)); for (int j=0;j<(comp->GetOutSect());++j) outID.push_back(posID(i,j)); ++i; } } void CuDiscrete:: WriteToStream(std::ostream& rOut) { for(int i=0; i\n"; } void CuCompound:: PropagateF(const CuMatrix& X, CuMatrix& Y) { int iLoc=0,oLoc=0; CuMatrix In; CuMatrix Out; for(int i=0; iGetNInputs()); Out.Init(Y,oLoc,mBlocks[i]->GetNOutputs()); mBlocks[i]->PropagateF(In,Out); iLoc+=mBlocks[i]->GetNInputs(); oLoc+=mBlocks[i]->GetNOutputs(); } } void CuCompound:: BackpropagateF(const CuMatrix& X, CuMatrix& Y) { printf("BP+\n"); int iLoc=0,oLoc=0; CuMatrix In; CuMatrix Out; for(int i=0; iGetNOutputs()); Out.Init(Y,oLoc,mBlocks[i]->GetNInputs()); mBlocks[i]->BackpropagateF(In,Out); iLoc+=mBlocks[i]->GetNOutputs(); oLoc+=mBlocks[i]->GetNInputs(); } printf("BP-\n"); } void CuCompound:: PropagateFnc(const CuMatrix& X, CuMatrix& Y) { Error("Not applicable"); } void CuCompound:: BackpropagateFnc(const CuMatrix& X, CuMatrix& Y) { Error("Not applicable"); } void CuCompound:: Update() { printf("U+\n"); for(int i=0; iIsUpdatable() ) { CuUpdatableComponent& rComp = dynamic_cast(*mBlocks[i]); rComp.Update(); } printf("U-\n"); } void CuCompound:: ReadFromStream(std::istream& rIn) { for(int i=0; i\n"; } } //namespace