- moved method of layer interaction from Layer to Stack

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@817 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-01-17 08:33:30 +00:00
parent c2f5083fc3
commit a372f1a30d
9 changed files with 381 additions and 117 deletions
+17 -65
View File
@@ -23,8 +23,9 @@
//==============================================================================
RbmComponent::RbmComponent (const std::string &name, size_t id, size_t numVisibleX, size_t numVisibleY, size_t numHidden, size_t numContext)
RbmComponent::RbmComponent (AStack &stack, const std::string &name, size_t id, size_t numVisibleX, size_t numVisibleY, size_t numHidden, size_t numContext)
: Layer(name, id, numVisibleX, numVisibleY, numHidden, numContext)
, m_stack(stack)
, m_currWeightIndexToDraw(0)
, DrawVisibleTrain(nullptr)
, DrawVisibleReconst(nullptr)
@@ -211,15 +212,15 @@ void RbmComponent::onDraw(DrawComponent &obj)
{
if (&obj == DrawHidden)
{
downPass(obj.getData());
m_stack.downPass(id(), obj.getData());
}
if (&obj == DrawVisibleTrain)
{
upDownPass(getTraining());
m_stack.upDownPass(id(), getTraining());
}
if (&obj == DrawContextTrain)
{
upDownPass(getTraining());
m_stack.upDownPass(id(), getTraining());
}
}
@@ -228,6 +229,8 @@ void RbmComponent::buttonClicked(Button* buttonThatWasClicked)
if (buttonThatWasClicked == m_toggleEnable)
{
bool state = buttonThatWasClicked->getToggleState();
setEnable(state);
if (state)
{
if (prev)
@@ -249,32 +252,14 @@ void RbmComponent::buttonClicked(Button* buttonThatWasClicked)
else if (buttonThatWasClicked == m_buttonCopyH2C)
{
DrawContextTrain->getData() = DrawHidden->getData();
upDownPass(getTraining());
m_stack.upDownPass(id(), getTraining());
}
}
void RbmComponent::redrawReconstruction()
{
RbmComponent *pComp = static_cast<RbmComponent*> (root());
pComp->upDownPass(pComp->getTraining());
}
void RbmComponent::gibbs(const arma::mat& vc)
{
arma::mat r = vc;
for (int i=0; i < params().numGibbs; i++)
{
DrawHidden->getData() = prob(v_to_h(r));
r = prob(h_to_v(DrawHidden->getData()));
}
DrawVisibleReconst->getData() = vc_to_v(r);
DrawContextReconst->getData() = vc_to_c(r);
DrawVisibleReconst->DrawData();
DrawContextReconst->DrawData();
DrawHidden->DrawData();
DrawContextReconst->DrawData();
m_stack.upDownPass(pComp->id(), pComp->getTraining());
}
arma::mat RbmComponent::getTraining() const
@@ -303,55 +288,22 @@ void RbmComponent::reconstRedraw(const arma::mat& vc)
DrawContextReconst->DrawData();
}
void RbmComponent::upPass(const arma::mat& vc)
void RbmComponent::onUpPass(const arma::mat& v)
{
DrawVisibleTrain->getData() = vc_to_v(vc);
DrawVisibleTrain->getData() = vc_to_v(v);
DrawVisibleTrain->DrawData();
DrawContextTrain->getData() = vc_to_c(vc);
DrawContextTrain->getData() = vc_to_c(v);
DrawContextTrain->DrawData();
gibbs(vc);
if (next)
{
RbmComponent *pComp = static_cast<RbmComponent*> (next);
pComp->upPass(DrawHidden->getData());
}
trainRedraw(v);
}
void RbmComponent::downPass(const arma::mat& h)
void RbmComponent::onDownPass(const arma::mat& h)
{
DrawHidden->getData() = h;
DrawHidden->DrawData();
reconstRedraw(prob(h_to_v(h)));
if (prev)
{
RbmComponent *pComp = static_cast<RbmComponent*> (prev);
pComp->downPass(getReconst());
}
}
void RbmComponent::upDownPass(const arma::mat& vc)
{
trainRedraw(vc);
gibbs(vc);
if (next)
{
RbmComponent *pComp = static_cast<RbmComponent*> (next);
if (pComp->m_toggleEnable->getToggleState())
{
pComp->upDownPass(DrawHidden->getData());
}
else
{
return;
}
}
else if (prev)
{
RbmComponent *pComp = static_cast<RbmComponent*> (prev);
pComp->downPass(getReconst());
}
arma::mat r = prob(h_to_v(h));
reconstRedraw(r);
}
arma::mat RbmComponent::getConvolutedWeight(arma::mat const &w)
@@ -382,7 +334,7 @@ void RbmComponent::redrawWeights(size_t index)
void RbmComponent::setTrainingData(arma::mat const& batch)
{
RbmComponent *pComp = static_cast<RbmComponent*> (root());
pComp->upDownPass(batch);
m_stack.upDownPass(id(), batch);
}
//[/MiscUserCode]