- pulled LayerArray out of RbmComponent

git-svn-id: http://moon:8086/svn/software/trunk/projects/RBM@293 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2016-06-16 19:16:33 +00:00
parent 4dccddd50f
commit ff88a62e73
5 changed files with 56 additions and 64 deletions
+14 -13
View File
@@ -38,7 +38,10 @@ void mylog(const char* format, ...)
//==============================================================================
MainComponent::MainComponent ()
: Thread("RBM"),
m_pRbmComponent(nullptr)
m_pRbmComponent(nullptr),
m_layers(this)
{
addAndMakeVisible (trainButton = new TextButton ("Train button"));
trainButton->setButtonText (TRANS("Train"));
@@ -458,6 +461,7 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked)
else if (buttonThatWasClicked == addButton)
{
//[UserButtonCode_addButton] -- add your button handler code here..
m_layers.add(m_pRbmComponent->getTrainingData(), m_weights->getNumVisible());
m_pRbmComponent->addFromTraining();
//[/UserButtonCode_addButton]
}
@@ -471,8 +475,8 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked)
{
//[UserButtonCode_ShakeButton] -- add your button handler code here..
m_weights->shuffle(weightInitLabel->getText().getFloatValue());
m_pRbmComponent->redrawReconstruction();
m_pRbmComponent->redrawWeights();
m_pRbmComponent->redrawReconstruction();
//[/UserButtonCode_ShakeButton]
}
else if (buttonThatWasClicked == testButton)
@@ -503,25 +507,25 @@ void MainComponent::buttonClicked (Button* buttonThatWasClicked)
else if (buttonThatWasClicked == loadTrainingButton)
{
//[UserButtonCode_loadTrainingButton] -- add your button handler code here..
m_pRbmComponent->loadTraining((String(getBaseDir() + String(".trainingStates.dat"))).toUTF8());
loadTraining((String(getBaseDir() + String(".trainingStates.dat"))).toUTF8());
//[/UserButtonCode_loadTrainingButton]
}
else if (buttonThatWasClicked == saveTrainingButton)
{
//[UserButtonCode_saveTrainingButton] -- add your button handler code here..
m_pRbmComponent->saveTraining((String(getBaseDir() + String(".trainingStates.dat"))).toUTF8());
saveTraining((String(getBaseDir() + String(".trainingStates.dat"))).toUTF8());
//[/UserButtonCode_saveTrainingButton]
}
else if (buttonThatWasClicked == clearTrainingButton)
{
//[UserButtonCode_clearTrainingButton] -- add your button handler code here..
m_pRbmComponent->clearTraining();
clearTraining();
//[/UserButtonCode_clearTrainingButton]
}
else if (buttonThatWasClicked == removeTrainingButton)
{
//[UserButtonCode_removeTrainingButton] -- add your button handler code here..
m_pRbmComponent->removeTrainingAt((int)patterSlider->getValue());
removeTrainingAt((int)patterSlider->getValue());
//[/UserButtonCode_removeTrainingButton]
}
else if (buttonThatWasClicked == reconstructEquButton)
@@ -769,6 +773,7 @@ void MainComponent::create(juce::String const &projectName)
if (!projectName.isEmpty())
{
m_weights = new Weights((String(projectName + String(".weights.dat"))).toUTF8());
loadTraining((String(projectName + String(".trainingStates.dat"))).toUTF8());
}
else
{
@@ -783,11 +788,7 @@ void MainComponent::create(juce::String const &projectName)
numVisibleYLabel->setText(String(vNumY), dontSendNotification );
numHiddenLabel->setText(String(hNum), dontSendNotification );
addAndMakeVisible(m_pRbmComponent = new RbmComponent(*m_weights, *this));
if (!projectName.isEmpty())
{
m_pRbmComponent->loadTraining((String(projectName + String(".trainingStates.dat"))).toUTF8());
}
addAndMakeVisible(m_pRbmComponent = new RbmComponent(*m_weights, m_layers.data(), *this));
m_pRbmComponent->setBounds (16, 16, 430, 130);
m_pRbmComponent->setDoRaoBlackwell(rbmDoRaoBlackwellToggleButton->getToggleState());
@@ -830,9 +831,9 @@ void MainComponent::run()
// trainButton->setEnabled(true);
}
void MainComponent::onLayerSizeChanged(size_t size)
void MainComponent::onChanged(const LayerArray &obj)
{
patterSlider->setRange(0, size-1, 1);
patterSlider->setRange(0, obj.getSize()-1, 1);
}
void MainComponent::onRbmEpochTrained(size_t progressPercent)
+23 -1
View File
@@ -39,6 +39,7 @@
*/
class MainComponent : public Component,
public RbmComponentListener,
public LayerArrayListener,
public Thread,
public ButtonListener,
public SliderListener,
@@ -51,7 +52,7 @@ public:
//==============================================================================
//[UserMethods] -- You can add your own custom methods in this section.
void onLayerSizeChanged(size_t size) override;
void onChanged(const LayerArray &obj) override;
void onRbmEpochTrained(size_t progressPercent) override;
//[/UserMethods]
@@ -75,6 +76,7 @@ private:
//[UserVariables] -- You can add your own custom variables in this section.
ScopedPointer<Weights> m_weights;
ScopedPointer<RbmComponent> m_pRbmComponent;
LayerArray m_layers;
void load();
void save();
void create(juce::String const &projectName="");
@@ -82,6 +84,26 @@ private:
const juce::String& getBaseDir();
void run();
String m_baseDir;
void clearTraining()
{
m_layers.clear();
}
void loadTraining(const char *pFilename)
{
m_layers.clear();
m_layers.load(pFilename);
}
void saveTraining(const char *pFilename)
{
m_layers.save(pFilename);
}
void removeTrainingAt(size_t index)
{
m_layers.removeAt(index);
}
//[/UserVariables]
//==============================================================================
+8 -4
View File
@@ -238,7 +238,6 @@ public:
MatrixXd sumBiasH(1, m_w.getNumHidden());
MatrixXd sumWeights(m_w.getNumVisible(), m_w.getNumHidden());
MatrixXd deltaVar(MatrixXd::Zero(1, m_w.getNumVisible()));
MatrixXd deltaBiasV(MatrixXd::Zero(1, m_w.getNumVisible()));
MatrixXd deltaBiasH(MatrixXd::Zero(1, m_w.getNumHidden()));
MatrixXd deltaWeights(MatrixXd::Zero(m_w.getNumVisible(), m_w.getNumHidden()));
@@ -303,7 +302,7 @@ public:
}
}
// Create hidden reconstruction given v
// Create hidden representation given v
toHiddenBatch(m_h, m_v);
probsLogistic(m_h);
}
@@ -329,8 +328,8 @@ public:
if (m_doSparse)
{
m_h = m_v * m_w.weights();
m_h += m_w.hiddenBias().replicate(batchSize, 1);
// Create hidden representation given v
toHiddenBatch(m_h, m_v);
probsLogistic(m_h);
sumBiasH.fill(m_sparsity);
@@ -515,6 +514,11 @@ public:
return m_v;
}
MatrixXd const& getBatch()
{
return m_batch;
}
private:
Weights &m_w;
MatrixXd const &m_batch;
+3 -13
View File
@@ -23,10 +23,9 @@
//==============================================================================
RbmComponent::RbmComponent (Weights &weights, RbmComponentListener &listener)
RbmComponent::RbmComponent (Weights &weights, MatrixXd const &batch, RbmComponentListener &listener)
: m_weights(weights)
, m_listener(listener)
, m_layers(this)
, m_currWeightIndexToDraw(0)
, m_currTrainingIndexToDraw(0)
, DrawTraining(nullptr)
@@ -36,7 +35,7 @@ RbmComponent::RbmComponent (Weights &weights, RbmComponentListener &listener)
{
//[UserPreSize]
m_pRbm = new Rbm(m_weights, m_layers.data(), this);
m_pRbm = new Rbm(m_weights, batch, this);
size_t vNumX = m_weights.getNumVisibleX();
size_t vNumY = m_weights.getNumVisibleY();
size_t hNum = m_weights.getNumHidden();
@@ -202,11 +201,6 @@ void RbmComponent::mouseWheelMove (const MouseEvent& e, const MouseWheelDetails&
//[/UserCode_mouseWheelMove]
}
void RbmComponent::onChanged(const LayerArray &obj)
{
m_listener.onLayerSizeChanged((size_t)obj.getSize());
}
void RbmComponent::onEpochTrained(const Rbm &obj)
{
// mylog("Training %f %%\n", obj.getProgress()*100);
@@ -246,12 +240,8 @@ void RbmComponent::redrawReconstruction()
void RbmComponent::redrawWeights()
{
VectorXd w = m_weights.weights().col(m_currWeightIndexToDraw);
DrawWeights->getData() = w;
DrawWeights->getData() = m_weights.weights().col(m_currWeightIndexToDraw);
DrawWeights->DrawData();
DrawVars->getData() = m_pRbm->getVariableSigma();
DrawVars->DrawData();
}
void RbmComponent::setDoLearnVariance(bool value)
+8 -33
View File
@@ -23,7 +23,6 @@
//[Headers] -- You can add your own extra header files here --
#include "JuceHeader.h"
#include "DrawComponent.h"
#include "LayerArray.hpp"
#include "Rbm.hpp"
//[/Headers]
@@ -34,7 +33,6 @@ public:
virtual ~RbmComponentListener()
{
}
virtual void onLayerSizeChanged(size_t size) = 0;
virtual void onRbmEpochTrained(size_t progressPercent) = 0;
};
@@ -48,13 +46,12 @@ public:
//[/Comments]
*/
class RbmComponent : public Component,
public LayerArrayListener,
public RbmListener,
public DrawListener
{
public:
//==============================================================================
RbmComponent (Weights &weights, RbmComponentListener &listener);
RbmComponent (Weights &weights, MatrixXd const &batch, RbmComponentListener &listener);
~RbmComponent();
//==============================================================================
@@ -109,8 +106,6 @@ public:
DrawReconstruction->getData() = DrawTraining->getData();
DrawReconstruction->DrawData();
m_layers.add(DrawTraining->getData(), m_weights.getNumVisible());
m_listener.onLayerSizeChanged(m_layers.getSize());
}
void selectWeights(size_t index)
@@ -121,12 +116,10 @@ public:
void selectTraining(size_t index)
{
if (m_layers.getSize() > 0)
if (m_pRbm->getBatch().rows() > 0)
{
m_currTrainingIndexToDraw = index;
RowVectorXd t = m_layers.getAt(index);
DrawTraining->getData() = t;
DrawTraining->getData() = m_pRbm->getBatch().row(index);
DrawTraining->DrawData();
redrawReconstruction();
@@ -139,27 +132,6 @@ public:
DrawTraining->DrawData();
}
void clearTraining()
{
m_layers.clear();
}
void loadTraining(const char *pFilename)
{
m_layers.clear();
m_layers.load(pFilename);
}
void saveTraining(const char *pFilename)
{
m_layers.save(pFilename);
}
void removeTrainingAt(size_t index)
{
m_layers.removeAt(index);
}
void redrawWeights();
void redrawReconstruction();
void train(size_t numEpochs)
@@ -167,6 +139,11 @@ public:
m_pRbm->train(numEpochs);
}
RowVectorXd const& getTrainingData()
{
return DrawTraining->getData();
}
private:
//[UserVariables] -- You can add your own custom variables in this section.
ScopedPointer<Rbm> m_pRbm;
@@ -177,10 +154,8 @@ private:
ScopedPointer<DrawComponent> DrawWeights;
ScopedPointer<DrawComponent> DrawVars;
ScopedPointer<DrawComponent> DrawHidden;
LayerArray m_layers;
size_t m_currWeightIndexToDraw;
size_t m_currTrainingIndexToDraw;
void onChanged(const LayerArray &obj) override;
void onEpochTrained(const Rbm &obj) override;
void onDraw(DrawComponent &obj) override;
//[/UserVariables]