- miniBatchSize is parameter of train()

git-svn-id: http://moon:8086/svn/software/trunk/projects/RBM@307 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2016-07-07 23:34:03 +00:00
parent 0259727a2c
commit 2eabaa42ec
3 changed files with 15 additions and 28 deletions
+5 -9
View File
@@ -278,8 +278,8 @@ MainComponent::MainComponent ()
rbmDoSampleBatch->addListener (this);
addAndMakeVisible (sizeMiniBatch = new Label ("sizeMiniBatch",
TRANS("0")));
sizeMiniBatch->setTooltip (TRANS("Maximum number of training samples per train"));
TRANS("100")));
sizeMiniBatch->setTooltip (TRANS("Mini batch size"));
sizeMiniBatch->setFont (Font (15.00f, Font::plain));
sizeMiniBatch->setJustificationType (Justification::centred);
sizeMiniBatch->setEditable (true, true, false);
@@ -724,7 +724,6 @@ void MainComponent::labelTextChanged (Label* labelThatHasChanged)
else if (labelThatHasChanged == sizeMiniBatch)
{
//[UserLabelCode_sizeMiniBatch] -- add your label text handling code here..
m_pRbmComponentCurr->setMiniBatchSize((size_t)labelThatHasChanged->getText().getFloatValue());
//[/UserLabelCode_sizeMiniBatch]
}
@@ -875,9 +874,7 @@ const juce::String& MainComponent::getBaseDir()
void MainComponent::run()
{
// trainButton->setEnabled(false);
m_pRbmComponentCurr->train(numEpochslabel->getText().getIntValue());
// trainButton->setEnabled(true);
m_pRbmComponentCurr->train((size_t)numEpochslabel->getText().getIntValue(), (size_t)sizeMiniBatch->getText().getIntValue());
}
void MainComponent::onChanged(const LayerArray &obj)
@@ -913,7 +910,6 @@ void MainComponent::updateControls()
numVisibleLabel->setText(String(m_weightsCurr->getNumVisibleX()), dontSendNotification );
numVisibleYLabel->setText(String(m_weightsCurr->getNumVisibleY()), dontSendNotification );
numHiddenLabel->setText(String(m_weightsCurr->getNumHidden()), dontSendNotification );
sizeMiniBatch->setText(String(m_pRbmComponentCurr->params().m_miniBatchSize), dontSendNotification);
WeightsSlider->setRange(0, m_weightsCurr->getNumHidden()-1, 1);
numGibbsSlider->setValue(m_pRbmComponentCurr->params().m_numGibbs);
@@ -1118,8 +1114,8 @@ BEGIN_JUCER_METADATA
buttonText="Sample training" connectedEdges="0" needsCallback="1"
radioGroupId="0" state="0"/>
<LABEL name="sizeMiniBatch" id="dd9e3e6f2b7b22f8" memberName="sizeMiniBatch"
virtualName="" explicitFocusOrder="0" pos="1064 20 48 24" tooltip="Maximum number of training samples per train"
edTextCol="ff000000" edBkgCol="0" labelText="0" editableSingleClick="1"
virtualName="" explicitFocusOrder="0" pos="1064 20 48 24" tooltip="Mini batch size"
edTextCol="ff000000" edBkgCol="0" labelText="100" editableSingleClick="1"
editableDoubleClick="1" focusDiscardsChanges="0" fontname="Default font"
fontsize="15" bold="0" italic="0" justification="36"/>
<TOGGLEBUTTON name="rbmUseHiddenGaussian toggle button" id="92e05c920283616b"
+9 -15
View File
@@ -17,7 +17,6 @@ Rbm::Rbm(Weights &weights, const MatrixXd &batch)
, m_variableSigma(weights.getNumVisible())
, m_progress(0)
{
setMiniBatchSize(batch.rows());
Noise_Init(&m_noise, 0x32727155);
m_variableSigma.fill(m_params.m_constantSigma);
updateHiddenBatch();
@@ -198,17 +197,17 @@ MatrixXd Rbm::calcZ(MatrixXd &v, MatrixXd &h)
return t1;
}
void Rbm::train(uint32_t numEpochs, double sigmaMin)
void Rbm::train(size_t numEpochs, size_t miniBatchSize, double sigmaMin)
{
uint32_t i;
uint32_t epoch;
uint32_t gibbs;
size_t i;
size_t epoch;
size_t gibbs;
size_t trainingSize = m_batch.rows();
size_t trainingSizeRemain = trainingSize;
size_t batchRowIndex = 0;
double dProgress = 1.0/(numEpochs*(double)trainingSize/std::min(m_params.m_miniBatchSize, trainingSize));
double dProgress = 1.0/(numEpochs*(double)trainingSize/std::min(miniBatchSize, trainingSize));
MatrixXd dBiasV_curr(MatrixXd::Zero(1, m_w.getNumVisible()));
MatrixXd dBiasH_curr(MatrixXd::Zero(1, m_w.getNumHidden()));
@@ -221,14 +220,14 @@ void Rbm::train(uint32_t numEpochs, double sigmaMin)
while (trainingSizeRemain)
{
cout << "trainingSizeRemain: " << trainingSizeRemain << endl;
size_t toSlice = std::min(m_params.m_miniBatchSize, trainingSizeRemain);
size_t toSlice = std::min(miniBatchSize, trainingSizeRemain);
MatrixXd batch = m_batch.block(batchRowIndex, 0, toSlice, m_w.getNumVisible());
trainingSizeRemain -= toSlice;
batchRowIndex += toSlice;
size_t batchSize = batch.rows();
double mu_w = m_params.m_muWeights/std::min(m_params.m_miniBatchSize, trainingSize);
double mu_biasV = m_params.m_muWeights/std::min(m_params.m_miniBatchSize, trainingSize);
double mu_biasH = m_params.m_muWeights/std::min(m_params.m_miniBatchSize, trainingSize);
double mu_w = m_params.m_muWeights/std::min(miniBatchSize, trainingSize);
double mu_biasV = m_params.m_muWeights/std::min(miniBatchSize, trainingSize);
double mu_biasH = m_params.m_muWeights/std::min(miniBatchSize, trainingSize);
MatrixXd batch_sampled(batchSize, m_w.getNumVisible());
MatrixXd v_sampled(batchSize, m_w.getNumVisible());
@@ -514,11 +513,6 @@ void Rbm::setNumGibbs(size_t value)
onParamsChanged();
}
void Rbm::setMiniBatchSize(size_t size)
{
m_params.m_miniBatchSize = size;
}
void Rbm::setMuWeights(double value)
{
m_params.m_muWeights = value;
+1 -4
View File
@@ -37,7 +37,6 @@ public:
, m_doNormalizeData(false)
, m_doLearnVariance(false)
, m_numGibbs(1)
, m_miniBatchSize(100)
{
}
@@ -58,7 +57,6 @@ public:
bool m_doNormalizeData;
bool m_doLearnVariance;
size_t m_numGibbs;
size_t m_miniBatchSize;
};
Rbm(Weights &weights, const MatrixXd &batch);
@@ -78,7 +76,7 @@ public:
RowVectorXd calcMean(MatrixXd const &batch);
RowVectorXd calcSigma(MatrixXd const &batch);
MatrixXd calcZ(MatrixXd &v, MatrixXd &h);
void train(uint32_t numEpochs, double sigmaMin = 0.05);
void train(size_t numEpochs, size_t miniBatchSize, double sigmaMin = 0.05);
double getProgress() const;
double getEnergy(const VectorXd& visible, const VectorXd& hidden);
void toHidden(RowVectorXd &h, RowVectorXd const &v);
@@ -98,7 +96,6 @@ public:
void setNormalizeData(bool flag);
void setDoLearnVariance(bool flag);
void setNumGibbs(size_t value);
void setMiniBatchSize(size_t size);
void setMuWeights(double value);
void setMuSparsity(double value);
void setMomentum(double value);