- 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:
+17
-65
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user