- use Matrix, linear algebra library Eigen 3.2.2

git-svn-id: http://moon:8086/svn/software/trunk/projects/RBM@23 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2014-10-12 14:30:40 +00:00
parent 7b1a713adc
commit 19c69ac02a
13 changed files with 246 additions and 359 deletions
+7 -15
View File
@@ -14,7 +14,7 @@
class VisibleLayer : public Layer
{
public:
VisibleLayer(uint32_t numUnits = 0, const double *pStatesInit = nullptr)
VisibleLayer(uint32_t numUnits = 0, const VectorXd *pStatesInit = nullptr)
: Layer(numUnits, pStatesInit)
{
}
@@ -25,27 +25,19 @@ public:
double getEnergy(const Weights &weights)
{
uint32_t i;
double energy = 0;
double energy;
energy = -((Weights&)weights).visibleBias().transpose() * states();
for (i=0; i < getNumUnits(); i++)
{
energy -= weights.getBiasVisible()[i] * getStates()[i];
}
return energy;
}
private:
double accum(const Layer &layer, const Weights &weights, uint32_t index) const
double accum(Layer &layer, Weights &weights, uint32_t index)
{
uint32_t i;
double sum = weights.getBiasVisible()[index];
const double *pStates = layer.getStates();
double sum = ((Weights&)weights).visibleBias()[index];
for (i=0; i < layer.getNumUnits(); i++)
{
sum += pStates[i] * weights.getWeights()[i][index];
}
sum += layer.states().transpose() * ((Weights&)weights).weights().row(index).transpose();
return sum;
}