/* ============================================================================== This is an automatically generated GUI class created by the Introjucer! Be careful when adding custom code to these files, as only the code within the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. Created with Introjucer version: 3.1.0 ------------------------------------------------------------------------------ The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-13 by Raw Material Software Ltd. ============================================================================== */ //[Headers] You can add your own extra header files here... #ifdef WIN32 #include #endif #include #include //[/Headers] #include "MainComponent.h" //[MiscUserDefs] You can add your own user definitions and misc code here... #ifdef WIN32 void mylog(const char* format, ...) { char log_buf[257]; va_list argptr; va_start(argptr, format); vsprintf(log_buf, format, argptr); va_end(argptr); OutputDebugStringA (log_buf); } #else void mylog(const char* format, ...) { char log_buf[257]; va_list argptr; va_start(argptr, format); vprintf(format, argptr); va_end(argptr); } #endif //[/MiscUserDefs] //============================================================================== MainComponent::MainComponent () : Thread("RBM"), m_layers(this), m_pRbm(nullptr), DrawTraining(nullptr), DrawReconstruction(nullptr), DrawWeights(nullptr), DrawHidden(nullptr) { addAndMakeVisible (trainButton = new TextButton ("Train button")); trainButton->setButtonText (TRANS("Train")); trainButton->addListener (this); addAndMakeVisible (addButton = new TextButton ("Add button")); addButton->setButtonText (TRANS("Add")); addButton->addListener (this); addAndMakeVisible (patterSlider = new Slider ("Pattern slider")); patterSlider->setRange (0, 0, 1); patterSlider->setSliderStyle (Slider::LinearBar); patterSlider->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); patterSlider->addListener (this); addAndMakeVisible (reconstructButton = new TextButton ("Reconstruct button")); reconstructButton->setButtonText (TRANS("Reconstruct")); reconstructButton->addListener (this); addAndMakeVisible (ShakeButton = new TextButton ("Shake button")); ShakeButton->setButtonText (TRANS("Shake")); ShakeButton->addListener (this); addAndMakeVisible (WeightsSlider = new Slider ("Weights slider")); WeightsSlider->setRange (0, 0, 1); WeightsSlider->setSliderStyle (Slider::LinearBar); WeightsSlider->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); WeightsSlider->addListener (this); addAndMakeVisible (numEpochslabel = new Label ("Num Epochs label", TRANS("100"))); numEpochslabel->setFont (Font (15.00f, Font::plain)); numEpochslabel->setJustificationType (Justification::centred); numEpochslabel->setEditable (true, true, false); numEpochslabel->setColour (TextEditor::textColourId, Colours::black); numEpochslabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); numEpochslabel->addListener (this); addAndMakeVisible (learningRateLabel = new Label ("Learning Rate label", TRANS("0.01"))); learningRateLabel->setFont (Font (15.00f, Font::plain)); learningRateLabel->setJustificationType (Justification::centred); learningRateLabel->setEditable (true, true, false); learningRateLabel->setColour (TextEditor::textColourId, Colours::black); learningRateLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); learningRateLabel->addListener (this); addAndMakeVisible (testButton = new TextButton ("Test button")); testButton->setButtonText (TRANS("Test")); testButton->addListener (this); addAndMakeVisible (numVisibleLabel = new Label ("Num Visible label", TRANS("99999"))); numVisibleLabel->setFont (Font (15.00f, Font::plain)); numVisibleLabel->setJustificationType (Justification::centred); numVisibleLabel->setEditable (true, true, false); numVisibleLabel->setColour (TextEditor::textColourId, Colours::black); numVisibleLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); numVisibleLabel->addListener (this); addAndMakeVisible (numHiddenLabel = new Label ("Num Hidden label", TRANS("99999"))); numHiddenLabel->setFont (Font (15.00f, Font::plain)); numHiddenLabel->setJustificationType (Justification::centred); numHiddenLabel->setEditable (true, true, false); numHiddenLabel->setColour (TextEditor::textColourId, Colours::black); numHiddenLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); numHiddenLabel->addListener (this); addAndMakeVisible (createButton = new TextButton ("Create button")); createButton->setButtonText (TRANS("Create")); createButton->addListener (this); addAndMakeVisible (projectNameLabel = new Label ("Project Name label", TRANS("TestPrj"))); projectNameLabel->setFont (Font (15.00f, Font::plain)); projectNameLabel->setJustificationType (Justification::centred); projectNameLabel->setEditable (true, true, false); projectNameLabel->setColour (TextEditor::textColourId, Colours::black); projectNameLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); projectNameLabel->addListener (this); addAndMakeVisible (loadButton = new TextButton ("Load button")); loadButton->setButtonText (TRANS("Load")); loadButton->addListener (this); addAndMakeVisible (saveButton = new TextButton ("Save button")); saveButton->setButtonText (TRANS("Save")); saveButton->addListener (this); addAndMakeVisible (numVisibleYLabel = new Label ("Num Visible Y label", TRANS("99999"))); numVisibleYLabel->setFont (Font (15.00f, Font::plain)); numVisibleYLabel->setJustificationType (Justification::centred); numVisibleYLabel->setEditable (true, true, false); numVisibleYLabel->setColour (TextEditor::textColourId, Colours::black); numVisibleYLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); numVisibleYLabel->addListener (this); addAndMakeVisible (loadTrainingButton = new TextButton ("Load Training button")); loadTrainingButton->setButtonText (TRANS("Load T")); loadTrainingButton->addListener (this); addAndMakeVisible (saveTrainingButton = new TextButton ("Save Training button")); saveTrainingButton->setButtonText (TRANS("Save T")); saveTrainingButton->addListener (this); addAndMakeVisible (clearTrainingButton = new TextButton ("Clear Training button")); clearTrainingButton->setButtonText (TRANS("Clear T")); clearTrainingButton->addListener (this); addAndMakeVisible (removeTrainingButton = new TextButton ("Remove Training button")); removeTrainingButton->setButtonText (TRANS("Remove T")); removeTrainingButton->addListener (this); addAndMakeVisible (numGibbsSlider = new Slider ("Num. Gibbs slider")); numGibbsSlider->setRange (1, 101, 1); numGibbsSlider->setSliderStyle (Slider::LinearBar); numGibbsSlider->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); numGibbsSlider->addListener (this); addAndMakeVisible (reconstructEquButton = new TextButton ("Reconstruct Equilibrium button")); reconstructEquButton->setButtonText (TRANS("Reconst Equ.")); reconstructEquButton->addListener (this); addAndMakeVisible (rbmDoRaoBlackwellToggleButton = new ToggleButton ("rbmDoRaoBlackwell toggle button")); rbmDoRaoBlackwellToggleButton->setButtonText (TRANS("Rao-Blackwell")); rbmDoRaoBlackwellToggleButton->addListener (this); addAndMakeVisible (rbmReduceVarianceToggleButton = new ToggleButton ("rbmReduceVariance toggle button")); rbmReduceVarianceToggleButton->setButtonText (TRANS("Reduce Variance")); rbmReduceVarianceToggleButton->addListener (this); addAndMakeVisible (lambdaLabel = new Label ("Lambda label", TRANS("1.0"))); lambdaLabel->setFont (Font (15.00f, Font::plain)); lambdaLabel->setJustificationType (Justification::centred); lambdaLabel->setEditable (true, true, false); lambdaLabel->setColour (TextEditor::textColourId, Colours::black); lambdaLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); lambdaLabel->addListener (this); addAndMakeVisible (sigmaLabel = new Label ("Sigma label", TRANS("1.0"))); sigmaLabel->setFont (Font (15.00f, Font::plain)); sigmaLabel->setJustificationType (Justification::centred); sigmaLabel->setEditable (true, true, false); sigmaLabel->setColour (TextEditor::textColourId, Colours::black); sigmaLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); sigmaLabel->addListener (this); addAndMakeVisible (rbmUseVisibleGaussianToggleButton = new ToggleButton ("rbmUseVisibleGaussian toggle button")); rbmUseVisibleGaussianToggleButton->setButtonText (TRANS("Use gaussian visible")); rbmUseVisibleGaussianToggleButton->addListener (this); addAndMakeVisible (rbmDoSparseToggleButton = new ToggleButton ("rbmDoSparse toggle button")); rbmDoSparseToggleButton->setButtonText (TRANS("Do sparse")); rbmDoSparseToggleButton->addListener (this); addAndMakeVisible (sparsityLabel = new Label ("Sparsity label", TRANS("0.05"))); sparsityLabel->setFont (Font (15.00f, Font::plain)); sparsityLabel->setJustificationType (Justification::centred); sparsityLabel->setEditable (true, true, false); sparsityLabel->setColour (TextEditor::textColourId, Colours::black); sparsityLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); sparsityLabel->addListener (this); addAndMakeVisible (sigmaDecayLabel = new Label ("SigmaDecay label", TRANS("1.0"))); sigmaDecayLabel->setFont (Font (15.00f, Font::plain)); sigmaDecayLabel->setJustificationType (Justification::centred); sigmaDecayLabel->setEditable (true, true, false); sigmaDecayLabel->setColour (TextEditor::textColourId, Colours::black); sigmaDecayLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); sigmaDecayLabel->addListener (this); addAndMakeVisible (weightDecayLabel = new Label ("WeightDecay label", TRANS("0.0"))); weightDecayLabel->setFont (Font (15.00f, Font::plain)); weightDecayLabel->setJustificationType (Justification::centred); weightDecayLabel->setEditable (true, true, false); weightDecayLabel->setColour (TextEditor::textColourId, Colours::black); weightDecayLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); weightDecayLabel->addListener (this); addAndMakeVisible (m_progressBarSlider = new Slider ("progressBar slider")); m_progressBarSlider->setRange (0, 100, 1); m_progressBarSlider->setSliderStyle (Slider::LinearBar); m_progressBarSlider->setTextBoxStyle (Slider::TextBoxLeft, true, 80, 20); m_progressBarSlider->addListener (this); addAndMakeVisible (momentumLabel = new Label ("Momentum label", TRANS("0.5"))); momentumLabel->setFont (Font (15.00f, Font::plain)); momentumLabel->setJustificationType (Justification::centred); momentumLabel->setEditable (true, true, false); momentumLabel->setColour (TextEditor::textColourId, Colours::black); momentumLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); momentumLabel->addListener (this); addAndMakeVisible (sparsityLearningRateLabel = new Label ("SparsityLearn label", TRANS("0.01"))); sparsityLearningRateLabel->setFont (Font (15.00f, Font::plain)); sparsityLearningRateLabel->setJustificationType (Justification::centred); sparsityLearningRateLabel->setEditable (true, true, false); sparsityLearningRateLabel->setColour (TextEditor::textColourId, Colours::black); sparsityLearningRateLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); sparsityLearningRateLabel->addListener (this); addAndMakeVisible (weightInitLabel = new Label ("WeightInit label", TRANS("0.001"))); weightInitLabel->setFont (Font (15.00f, Font::plain)); weightInitLabel->setJustificationType (Justification::centred); weightInitLabel->setEditable (true, true, false); weightInitLabel->setColour (TextEditor::textColourId, Colours::black); weightInitLabel->setColour (TextEditor::backgroundColourId, Colour (0x00000000)); weightInitLabel->addListener (this); //[UserPreSize] m_vNumX = 16; m_vNumY = 16; m_hNum = 64; m_numGibbs = 1; m_weights.setUnits(m_vNumX*m_vNumY, m_hNum); m_pRbm = new Rbm(m_weights, this); create(); //[/UserPreSize] setSize (800, 600); //[Constructor] You can add your own custom stuff here.. m_progressBarSlider->setValue(100); //[/Constructor] } MainComponent::~MainComponent() { //[Destructor_pre]. You can add your own custom destruction code here.. //[/Destructor_pre] trainButton = nullptr; addButton = nullptr; patterSlider = nullptr; reconstructButton = nullptr; ShakeButton = nullptr; WeightsSlider = nullptr; numEpochslabel = nullptr; learningRateLabel = nullptr; testButton = nullptr; numVisibleLabel = nullptr; numHiddenLabel = nullptr; createButton = nullptr; projectNameLabel = nullptr; loadButton = nullptr; saveButton = nullptr; numVisibleYLabel = nullptr; loadTrainingButton = nullptr; saveTrainingButton = nullptr; clearTrainingButton = nullptr; removeTrainingButton = nullptr; numGibbsSlider = nullptr; reconstructEquButton = nullptr; rbmDoRaoBlackwellToggleButton = nullptr; rbmReduceVarianceToggleButton = nullptr; lambdaLabel = nullptr; sigmaLabel = nullptr; rbmUseVisibleGaussianToggleButton = nullptr; rbmDoSparseToggleButton = nullptr; sparsityLabel = nullptr; sigmaDecayLabel = nullptr; weightDecayLabel = nullptr; m_progressBarSlider = nullptr; momentumLabel = nullptr; sparsityLearningRateLabel = nullptr; weightInitLabel = nullptr; //[Destructor]. You can add your own custom destruction code here.. DrawTraining = nullptr; DrawReconstruction = nullptr; DrawWeights = nullptr; DrawHidden = nullptr; m_pRbm = nullptr; //[/Destructor] } //============================================================================== void MainComponent::paint (Graphics& g) { //[UserPrePaint] Add your own custom painting code here.. //[/UserPrePaint] g.fillAll (Colours::white); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sigma"), 32, 306, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Lambda"), 120, 306, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Num. epochs"), 32, 354, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Alpha"), 120, 354, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sparsity"), 208, 306, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sigma decay"), 296, 306, 96, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Weight decay"), 296, 354, 96, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Momentum"), 208, 354, 80, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Sparsity Alpha"), 408, 306, 96, 14, Justification::centred, true); g.setColour (Colours::black); g.setFont (Font (15.00f, Font::plain)); g.drawText (TRANS("Weight init"), 408, 354, 96, 14, Justification::centred, true); //[UserPaint] Add your own custom painting code here.. //[/UserPaint] } void MainComponent::resized() { trainButton->setBounds (120, 408, 72, 24); addButton->setBounds (24, 160, 72, 24); patterSlider->setBounds (224, 448, 184, 24); reconstructButton->setBounds (24, 408, 72, 24); ShakeButton->setBounds (120, 448, 72, 24); WeightsSlider->setBounds (224, 488, 184, 24); numEpochslabel->setBounds (32, 368, 72, 24); learningRateLabel->setBounds (120, 368, 72, 24); testButton->setBounds (120, 160, 72, 24); numVisibleLabel->setBounds (504, 224, 72, 24); numHiddenLabel->setBounds (552, 256, 72, 24); createButton->setBounds (552, 288, 72, 24); projectNameLabel->setBounds (536, 192, 96, 24); loadButton->setBounds (504, 160, 72, 24); saveButton->setBounds (584, 160, 72, 24); numVisibleYLabel->setBounds (576, 224, 72, 24); loadTrainingButton->setBounds (504, 48, 72, 24); saveTrainingButton->setBounds (584, 48, 72, 24); clearTrainingButton->setBounds (584, 88, 72, 24); removeTrainingButton->setBounds (504, 88, 72, 24); numGibbsSlider->setBounds (224, 408, 184, 24); reconstructEquButton->setBounds (24, 448, 72, 24); rbmDoRaoBlackwellToggleButton->setBounds (24, 200, 112, 24); rbmReduceVarianceToggleButton->setBounds (168, 200, 128, 24); lambdaLabel->setBounds (120, 320, 72, 24); sigmaLabel->setBounds (32, 320, 72, 24); rbmUseVisibleGaussianToggleButton->setBounds (168, 232, 160, 24); rbmDoSparseToggleButton->setBounds (24, 232, 128, 24); sparsityLabel->setBounds (208, 320, 72, 24); sigmaDecayLabel->setBounds (304, 320, 72, 24); weightDecayLabel->setBounds (304, 368, 72, 24); m_progressBarSlider->setBounds (216, 160, 184, 24); momentumLabel->setBounds (208, 368, 72, 24); sparsityLearningRateLabel->setBounds (416, 320, 72, 24); weightInitLabel->setBounds (416, 368, 72, 24); //[UserResized] Add your own custom resize handling here.. DrawTraining->setBounds (16, 16, 100, 100); DrawReconstruction->setBounds (110+16, 16, 100, 100); DrawWeights->setBounds (220+16, 16, 100, 100); DrawHidden->setBounds (16, 16+110, 320, 20); //[/UserResized] } void MainComponent::buttonClicked (Button* buttonThatWasClicked) { //[UserbuttonClicked_Pre] //[/UserbuttonClicked_Pre] if (buttonThatWasClicked == trainButton) { //[UserButtonCode_trainButton] -- add your button handler code here.. startThread(); //[/UserButtonCode_trainButton] } else if (buttonThatWasClicked == addButton) { //[UserButtonCode_addButton] -- add your button handler code here.. DrawReconstruction->setData(DrawTraining->getData()); m_layers.add(&DrawTraining->getData(), m_vNumX*m_vNumY); patterSlider->setRange (0, m_layers.getSize()-1, 1); //[/UserButtonCode_addButton] } else if (buttonThatWasClicked == reconstructButton) { //[UserButtonCode_reconstructButton] -- add your button handler code here.. redrawReconstruction(); //[/UserButtonCode_reconstructButton] } else if (buttonThatWasClicked == ShakeButton) { //[UserButtonCode_ShakeButton] -- add your button handler code here.. m_weights.shuffle(weightInitLabel->getText().getFloatValue()); redrawReconstruction(); redrawWeights((int)WeightsSlider->getValue()); //[/UserButtonCode_ShakeButton] } else if (buttonThatWasClicked == testButton) { //[UserButtonCode_testButton] -- add your button handler code here.. DrawTraining->setData(DrawReconstruction->getData()); redrawReconstruction(); //[/UserButtonCode_testButton] } else if (buttonThatWasClicked == createButton) { //[UserButtonCode_createButton] -- add your button handler code here.. m_vNumX = numVisibleLabel->getText().getIntValue(); m_vNumY = numVisibleYLabel->getText().getIntValue(); m_hNum = numHiddenLabel->getText().getIntValue(); m_weights.setUnits(m_vNumX*m_vNumY, m_hNum); create(); //[/UserButtonCode_createButton] } else if (buttonThatWasClicked == loadButton) { //[UserButtonCode_loadButton] -- add your button handler code here.. load(); redrawReconstruction(); redrawWeights((int)WeightsSlider->getValue()); //[/UserButtonCode_loadButton] } else if (buttonThatWasClicked == saveButton) { //[UserButtonCode_saveButton] -- add your button handler code here.. save(); //[/UserButtonCode_saveButton] } else if (buttonThatWasClicked == loadTrainingButton) { //[UserButtonCode_loadTrainingButton] -- add your button handler code here.. m_layers.clear(); m_layers.load((String(getBaseDir() + String(".trainingStates.dat"))).toUTF8()); redrawReconstruction(); //[/UserButtonCode_loadTrainingButton] } else if (buttonThatWasClicked == saveTrainingButton) { //[UserButtonCode_saveTrainingButton] -- add your button handler code here.. m_layers.save((String(getBaseDir() + String(".trainingStates.dat"))).toUTF8()); //[/UserButtonCode_saveTrainingButton] } else if (buttonThatWasClicked == clearTrainingButton) { //[UserButtonCode_clearTrainingButton] -- add your button handler code here.. m_layers.clear(); //[/UserButtonCode_clearTrainingButton] } else if (buttonThatWasClicked == removeTrainingButton) { //[UserButtonCode_removeTrainingButton] -- add your button handler code here.. m_layers.removeAt((int)patterSlider->getValue()); //[/UserButtonCode_removeTrainingButton] } else if (buttonThatWasClicked == reconstructEquButton) { //[UserButtonCode_reconstructEquButton] -- add your button handler code here.. uint32_t i; VectorXd V, H; V = DrawTraining->getData(); for (i=0; i < 100; i++) { H = m_pRbm->toHidden(V); DrawHidden->setData(H); V = m_pRbm->toVisible(H); DrawReconstruction->setData(V); } //[/UserButtonCode_reconstructEquButton] } else if (buttonThatWasClicked == rbmDoRaoBlackwellToggleButton) { //[UserButtonCode_rbmDoRaoBlackwellToggleButton] -- add your button handler code here.. m_pRbm->setDoRaoBlackwell(buttonThatWasClicked->getToggleState()); //[/UserButtonCode_rbmDoRaoBlackwellToggleButton] } else if (buttonThatWasClicked == rbmReduceVarianceToggleButton) { //[UserButtonCode_rbmReduceVarianceToggleButton] -- add your button handler code here.. m_pRbm->setUseProbsForHiddenReconstruction(buttonThatWasClicked->getToggleState()); //[/UserButtonCode_rbmReduceVarianceToggleButton] } else if (buttonThatWasClicked == rbmUseVisibleGaussianToggleButton) { //[UserButtonCode_rbmUseVisibleGaussianToggleButton] -- add your button handler code here.. m_pRbm->setUseVisibleGaussian(buttonThatWasClicked->getToggleState()); rbmReduceVarianceToggleButton->setEnabled(!buttonThatWasClicked->getToggleState()); if (buttonThatWasClicked->getToggleState()) { rbmReduceVarianceToggleButton_binary = rbmReduceVarianceToggleButton->getToggleState(); rbmReduceVarianceToggleButton->setToggleState(false, sendNotification); sigmaLabel->setText(String(sigma_gauss, 2), sendNotification); sigmaDecayLabel->setText(String(sigmaDecay_gauss, 2), sendNotification); } else { sigma_gauss = sigmaLabel->getText().getFloatValue(); sigmaDecay_gauss = sigmaDecayLabel->getText().getFloatValue(); sigmaLabel->setText("1.0", sendNotification); sigmaDecayLabel->setText("1.0", sendNotification); rbmReduceVarianceToggleButton->setToggleState(rbmReduceVarianceToggleButton_binary, sendNotification); } redrawReconstruction(); //[/UserButtonCode_rbmUseVisibleGaussianToggleButton] } else if (buttonThatWasClicked == rbmDoSparseToggleButton) { //[UserButtonCode_rbmDoSparseToggleButton] -- add your button handler code here.. m_pRbm->setDoSparse(buttonThatWasClicked->getToggleState()); //[/UserButtonCode_rbmDoSparseToggleButton] } //[UserbuttonClicked_Post] //[/UserbuttonClicked_Post] } void MainComponent::sliderValueChanged (Slider* sliderThatWasMoved) { //[UsersliderValueChanged_Pre] //[/UsersliderValueChanged_Pre] if (sliderThatWasMoved == patterSlider) { //[UserSliderCode_patterSlider] -- add your slider handling code here.. if (m_layers.getSize() > 0) { VisibleLayer &p = (VisibleLayer&)m_layers.getAt((int)sliderThatWasMoved->getValue()); DrawTraining->setData(p.states()); redrawReconstruction(); } //[/UserSliderCode_patterSlider] } else if (sliderThatWasMoved == WeightsSlider) { //[UserSliderCode_WeightsSlider] -- add your slider handling code here.. redrawWeights((int)sliderThatWasMoved->getValue()); //[/UserSliderCode_WeightsSlider] } else if (sliderThatWasMoved == numGibbsSlider) { //[UserSliderCode_numGibbsSlider] -- add your slider handling code here.. m_pRbm->setNumGibbs((uint32_t)sliderThatWasMoved->getValue()); //[/UserSliderCode_numGibbsSlider] } else if (sliderThatWasMoved == m_progressBarSlider) { //[UserSliderCode_m_progressBarSlider] -- add your slider handling code here.. //[/UserSliderCode_m_progressBarSlider] } //[UsersliderValueChanged_Post] //[/UsersliderValueChanged_Post] } void MainComponent::labelTextChanged (Label* labelThatHasChanged) { //[UserlabelTextChanged_Pre] //[/UserlabelTextChanged_Pre] if (labelThatHasChanged == numEpochslabel) { //[UserLabelCode_numEpochslabel] -- add your label text handling code here.. //[/UserLabelCode_numEpochslabel] } else if (labelThatHasChanged == learningRateLabel) { //[UserLabelCode_learningRateLabel] -- add your label text handling code here.. m_pRbm->setMuWeights(labelThatHasChanged->getText().getFloatValue()); //[/UserLabelCode_learningRateLabel] } else if (labelThatHasChanged == numVisibleLabel) { //[UserLabelCode_numVisibleLabel] -- add your label text handling code here.. //[/UserLabelCode_numVisibleLabel] } else if (labelThatHasChanged == numHiddenLabel) { //[UserLabelCode_numHiddenLabel] -- add your label text handling code here.. //[/UserLabelCode_numHiddenLabel] } else if (labelThatHasChanged == projectNameLabel) { //[UserLabelCode_projectNameLabel] -- add your label text handling code here.. //[/UserLabelCode_projectNameLabel] } else if (labelThatHasChanged == numVisibleYLabel) { //[UserLabelCode_numVisibleYLabel] -- add your label text handling code here.. //[/UserLabelCode_numVisibleYLabel] } else if (labelThatHasChanged == lambdaLabel) { //[UserLabelCode_lambdaLabel] -- add your label text handling code here.. m_pRbm->setLambda(labelThatHasChanged->getText().getFloatValue()); redrawReconstruction(); //[/UserLabelCode_lambdaLabel] } else if (labelThatHasChanged == sigmaLabel) { //[UserLabelCode_sigmaLabel] -- add your label text handling code here.. m_pRbm->setSigma(labelThatHasChanged->getText().getFloatValue()); redrawReconstruction(); //[/UserLabelCode_sigmaLabel] } else if (labelThatHasChanged == sparsityLabel) { //[UserLabelCode_sparsityLabel] -- add your label text handling code here.. m_pRbm->setSparsity(labelThatHasChanged->getText().getFloatValue()); //[/UserLabelCode_sparsityLabel] } else if (labelThatHasChanged == sigmaDecayLabel) { //[UserLabelCode_sigmaDecayLabel] -- add your label text handling code here.. m_pRbm->setSigmaDecay(labelThatHasChanged->getText().getFloatValue()); //[/UserLabelCode_sigmaDecayLabel] } else if (labelThatHasChanged == weightDecayLabel) { //[UserLabelCode_weightDecayLabel] -- add your label text handling code here.. m_pRbm->setWeightDecay(labelThatHasChanged->getText().getFloatValue()); //[/UserLabelCode_weightDecayLabel] } else if (labelThatHasChanged == momentumLabel) { //[UserLabelCode_momentumLabel] -- add your label text handling code here.. m_pRbm->setMomentum(labelThatHasChanged->getText().getFloatValue()); //[/UserLabelCode_momentumLabel] } else if (labelThatHasChanged == sparsityLearningRateLabel) { //[UserLabelCode_sparsityLearningRateLabel] -- add your label text handling code here.. m_pRbm->setMuSparsity(labelThatHasChanged->getText().getFloatValue()); //[/UserLabelCode_sparsityLearningRateLabel] } else if (labelThatHasChanged == weightInitLabel) { //[UserLabelCode_weightInitLabel] -- add your label text handling code here.. //[/UserLabelCode_weightInitLabel] } //[UserlabelTextChanged_Post] //[/UserlabelTextChanged_Post] } //[MiscUserCode] You can add your own definitions of your custom methods or any other code here... void MainComponent::load () { m_weights.load((String(getBaseDir() + String(".weights.dat"))).toUTF8()); m_vNumX = m_vNumY = (int)sqrt((float)m_weights.getNumVisible()); m_hNum = m_weights.getNumHidden(); create(); } void MainComponent::save () { m_weights.save((String(getBaseDir() + String(".weights.dat"))).toUTF8()); } void MainComponent::create() { DrawTraining = nullptr; DrawReconstruction = nullptr; DrawWeights = nullptr; DrawHidden = nullptr; WeightsSlider->setRange(0, m_hNum-1, 1); addAndMakeVisible (DrawTraining = new DrawComponent (m_vNumX, m_vNumY)); DrawTraining->setListener(this); addAndMakeVisible (DrawReconstruction = new DrawComponent (m_vNumX, m_vNumY)); addAndMakeVisible (DrawWeights = new DrawComponent (m_vNumX, m_vNumY)); addAndMakeVisible (DrawHidden = new DrawComponent (m_hNum, 1)); DrawHidden->setListener(this); numVisibleLabel->setText(String(m_vNumX), dontSendNotification ); numVisibleYLabel->setText(String(m_vNumY), dontSendNotification ); numHiddenLabel->setText(String(m_hNum), dontSendNotification ); sigma_gauss = 0.5; sigmaDecay_gauss = 1.0; m_pRbm->setDoRaoBlackwell(rbmDoRaoBlackwellToggleButton->getToggleState()); m_pRbm->setUseProbsForHiddenReconstruction(rbmReduceVarianceToggleButton->getToggleState()); m_pRbm->setUseVisibleGaussian(rbmUseVisibleGaussianToggleButton->getToggleState()); m_pRbm->setDoSparse(rbmDoSparseToggleButton->getToggleState()); m_pRbm->setLambda(lambdaLabel->getText().getFloatValue()); m_pRbm->setSigma(sigmaLabel->getText().getFloatValue()); m_pRbm->setSigmaDecay(sigmaDecayLabel->getText().getFloatValue()); m_pRbm->setWeightDecay(weightDecayLabel->getText().getFloatValue()); m_pRbm->setSparsity(sparsityLabel->getText().getFloatValue()); m_pRbm->setNumGibbs((uint32_t)numGibbsSlider->getValue()); resized(); } void MainComponent::destroy() { } const juce::String& MainComponent::getBaseDir() { m_baseDir = String("./") + projectNameLabel->getText(); return m_baseDir; } void MainComponent::onChanged(const LayerArray &obj) { patterSlider->setRange(0, std::max(0,(int)m_layers.getSize()-1), 1); } void MainComponent::onEpochTrained(const Rbm &obj) { // mylog("Training %f %%\n", obj.getProgress()*100); redrawReconstruction(); redrawWeights((int)WeightsSlider->getValue()); m_progressBarSlider->setValue((int)(100*obj.getProgress()), dontSendNotification); } void MainComponent::onDraw(DrawComponent &obj) { if (&obj == DrawHidden) { DrawReconstruction->setData(m_pRbm->toVisible(obj.getData())); } if (&obj == DrawTraining) { DrawReconstruction->setData(m_pRbm->toVisible(m_pRbm->toHidden(obj.getData()))); DrawHidden->setData(m_pRbm->toHidden(obj.getData())); } } void MainComponent::redrawReconstruction() { DrawHidden->setData(m_pRbm->toHidden(DrawTraining->getData())); DrawReconstruction->setData(m_pRbm->toVisible(DrawHidden->getData())); double energy = m_pRbm->getEnergy(DrawTraining->getData(), DrawHidden->getData()); cout << "Energy(" << 0 <<") = " << energy << endl; } void MainComponent::redrawWeights(int index) { VectorXd w = m_weights.weights().col(index); DrawWeights->setData(w); } void MainComponent::run() { trainButton->setEnabled(false); m_pRbm->train(m_layers, numEpochslabel->getText().getIntValue()); trainButton->setEnabled(true); } //[/MiscUserCode] //============================================================================== #if 0 /* -- Introjucer information section -- This is where the Introjucer stores the metadata that describe this GUI layout, so make changes in here at your peril! BEGIN_JUCER_METADATA END_JUCER_METADATA */ #endif //[EndFile] You can add extra defines here... //[/EndFile]