- 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
+24 -39
View File
@@ -20,6 +20,7 @@ Layer::Layer(const string &name, size_t id, size_t numVisibleX, size_t numVisibl
, prev(nullptr)
, m_name(name)
, m_id(id)
, m_isEnabled(true)
, m_numVisibleX(numVisibleX)
, m_numVisibleY(numVisibleY)
, m_numContext(numContext)
@@ -34,6 +35,7 @@ Layer::Layer(const Layer& orig)
, prev(nullptr)
, m_name(orig.m_name)
, m_id(orig.m_id)
, m_isEnabled(orig.m_isEnabled)
, m_numVisibleX(orig.m_numVisibleX)
, m_numVisibleY(orig.m_numVisibleY)
{
@@ -48,6 +50,16 @@ size_t Layer::id()
return m_id;
}
bool Layer::isEnable()
{
return m_isEnabled;
}
void Layer::setEnable(bool enable)
{
m_isEnabled = enable;
}
std::string& Layer::name()
{
return m_name;
@@ -78,53 +90,26 @@ Layer* Layer::root()
return pLayer;
}
arma::mat Layer::gibbsPass(arma::mat& vr)
arma::mat Layer::to_h_gibbs(const arma::mat& v_probs)
{
arma::mat h;
for (int i = 0; i < params().numGibbs; i++)
{
h = prob(v_to_h(vr));
vr = prob(h_to_v(h));
}
onUpPass(v_probs);
arma::mat v = v_probs;
arma::mat h = toHiddenProbs(v);
gibbs_vh(v, h);
return h;
}
arma::mat Layer::downPass(const arma::mat& h)
arma::mat Layer::to_v_gibbs(const arma::mat& h_probs)
{
arma::mat v = prob(h_to_v(h));
if (prev)
{
return prev->downPass(v);
}
onDownPass(h_probs);
arma::mat h = h_probs;
arma::mat v = toVisibleProbs(h);
gibbs_hv(h, v);
return v;
}
arma::mat Layer::upPass(const arma::mat& v)
{
arma::mat r = v;
arma::mat h = gibbsPass(r);
if (next)
{
return next->upPass(h);
}
return h;
}
arma::mat Layer::upDownPass(const arma::mat& v)
{
arma::mat r = v;
arma::mat h = gibbsPass(r);
if (next)
{
next->upDownPass(h);
}
else if (prev)
{
prev->downPass(r);
}
return r;
}
arma::mat Layer::vc_to_c(const arma::mat& vc) const
{
if (m_numContext == 0)