Change size of predictors and responses

This commit is contained in:
Saksham Bansal
2019-05-27 18:56:19 +07:00
parent b988e6966f
commit 8f5a649eb8
3 changed files with 35 additions and 36 deletions
+18 -19
View File
@@ -65,18 +65,17 @@ GAN<Model, InitializationRuleType, Noise, PolicyType>::GAN(
this->discriminator.deterministic = this->generator.deterministic = true;
responses.set_size(1, predictors.n_cols);
responses.ones();
this->predictors.set_size(predictors.n_rows, predictors.n_cols + batchSize);
this->predictors.cols(0, predictors.n_cols - 1) = predictors;
this->discriminator.predictors = arma::mat(this->predictors.memptr(),
this->predictors.n_rows, this->predictors.n_cols, false, false);
this->discriminator.predictors.set_size(predictors.n_rows,
predictors.n_cols + batchSize);
this->discriminator.predictors.cols(0, predictors.n_cols - 1) = predictors;
this->predictors = arma::mat(this->discriminator.predictors.memptr(),
predictors.n_rows, predictors.n_cols, false, false);
this->discriminator.responses.set_size(1, predictors.n_cols + batchSize);
this->discriminator.responses.ones();
this->discriminator.responses.cols(predictors.n_cols,
responses.set_size(1, predictors.n_cols + batchSize);
responses.ones();
responses.cols(predictors.n_cols,
predictors.n_cols + batchSize - 1) = arma::zeros(1, batchSize);
this->discriminator.responses = arma::mat(this->responses.memptr(),
this->responses.n_rows, this->responses.n_cols, false, false);
numFunctions = predictors.n_cols;
@@ -232,14 +231,14 @@ GAN<Model, InitializationRuleType, Noise, PolicyType>::Evaluate(
noise.imbue( [&]() { return noiseFunction();} );
generator.Forward(std::move(noise));
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
boost::apply_visitor(outputParameterVisitor, generator.network.back());
discriminator.Forward(std::move(discriminator.predictors.cols(numFunctions,
discriminator.Forward(std::move(predictors.cols(numFunctions,
numFunctions + batchSize - 1)));
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
arma::zeros(1, batchSize);
currentTarget = arma::mat(discriminator.responses.memptr() + numFunctions,
currentTarget = arma::mat(responses.memptr() + numFunctions,
1, batchSize, false, false);
res += discriminator.outputLayer.Forward(
std::move(boost::apply_visitor(
@@ -299,9 +298,9 @@ EvaluateWithGradient(const arma::mat& /* parameters */,
noise.imbue( [&]() { return noiseFunction();} );
generator.Forward(std::move(noise));
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
boost::apply_visitor(outputParameterVisitor, generator.network.back());
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
arma::zeros(1, batchSize);
// Get the gradients of the Generator.
@@ -313,7 +312,7 @@ EvaluateWithGradient(const arma::mat& /* parameters */,
{
// Minimize -log(D(G(noise))).
// Pass the error from Discriminator to Generator.
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
arma::ones(1, batchSize);
discriminator.Gradient(discriminator.parameter, numFunctions,
noiseGradientDiscriminator, batchSize);
@@ -372,8 +371,8 @@ void GAN<Model, InitializationRuleType, Noise, PolicyType>::Shuffle()
{
arma::uvec ordering = arma::shuffle(arma::linspace<arma::uvec>(0,
numFunctions - 1, numFunctions));
discriminator.predictors.cols(0, numFunctions- 1) =
predictors.cols(ordering);
arma::mat temp = predictors.cols(ordering);
predictors.cols(0, numFunctions - 1) = temp;
}
template<
+7 -7
View File
@@ -51,14 +51,14 @@ GAN<Model, InitializationRuleType, Noise, PolicyType>::Evaluate(
noise.imbue( [&]() { return noiseFunction();} );
generator.Forward(std::move(noise));
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
boost::apply_visitor(outputParameterVisitor, generator.network.back());
discriminator.Forward(std::move(discriminator.predictors.cols(numFunctions,
discriminator.Forward(std::move(predictors.cols(numFunctions,
numFunctions + batchSize - 1)));
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
-arma::ones(1, batchSize);
currentTarget = arma::mat(discriminator.responses.memptr() + numFunctions,
currentTarget = arma::mat(responses.memptr() + numFunctions,
1, batchSize, false, false);
res += discriminator.outputLayer.Forward(
std::move(boost::apply_visitor(
@@ -117,9 +117,9 @@ EvaluateWithGradient(const arma::mat& /* parameters */,
noise.imbue( [&]() { return noiseFunction();} );
generator.Forward(std::move(noise));
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
boost::apply_visitor(outputParameterVisitor, generator.network.back());
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
-arma::ones(1, batchSize);
// Get the gradients of the Generator.
@@ -133,7 +133,7 @@ EvaluateWithGradient(const arma::mat& /* parameters */,
{
// Minimize -D(G(noise)).
// Pass the error from Discriminator to Generator.
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
arma::ones(1, batchSize);
discriminator.Gradient(discriminator.parameter, numFunctions,
noiseGradientDiscriminator, batchSize);
+10 -10
View File
@@ -54,14 +54,14 @@ GAN<Model, InitializationRuleType, Noise, PolicyType>::Evaluate(
arma::mat generatedData = boost::apply_visitor(outputParameterVisitor,
generator.network.back());
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
generatedData;
discriminator.Forward(std::move(discriminator.predictors.cols(numFunctions,
discriminator.Forward(std::move(predictors.cols(numFunctions,
numFunctions + batchSize - 1)));
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
-arma::ones(1, batchSize);
currentTarget = arma::mat(discriminator.responses.memptr() + numFunctions,
currentTarget = arma::mat(responses.memptr() + numFunctions,
1, batchSize, false, false);
res += discriminator.outputLayer.Forward(
std::move(boost::apply_visitor(
@@ -70,9 +70,9 @@ GAN<Model, InitializationRuleType, Noise, PolicyType>::Evaluate(
// Gradient Penalty is calculated here.
double epsilon = math::Random();
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
(epsilon * currentInput) + ((1.0 - epsilon) * generatedData);
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
-arma::ones(1, batchSize);
discriminator.Gradient(discriminator.parameter, numFunctions,
normGradientDiscriminator, batchSize);
@@ -139,15 +139,15 @@ EvaluateWithGradient(const arma::mat& /* parameters */,
// Gradient Penalty is calculated here.
double epsilon = math::Random();
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
(epsilon * currentInput) + ((1.0 - epsilon) * generatedData);
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
-arma::ones(1, batchSize);
discriminator.Gradient(discriminator.parameter, numFunctions,
normGradientDiscriminator, batchSize);
res += lambda * std::pow(arma::norm(normGradientDiscriminator, 2) - 1, 2);
discriminator.predictors.cols(numFunctions, numFunctions + batchSize - 1) =
predictors.cols(numFunctions, numFunctions + batchSize - 1) =
generatedData;
res += discriminator.EvaluateWithGradient(discriminator.parameter,
numFunctions, noiseGradientDiscriminator, batchSize);
@@ -157,7 +157,7 @@ EvaluateWithGradient(const arma::mat& /* parameters */,
{
// Minimize -D(G(noise)).
// Pass the error from Discriminator to Generator.
discriminator.responses.cols(numFunctions, numFunctions + batchSize - 1) =
responses.cols(numFunctions, numFunctions + batchSize - 1) =
arma::ones(1, batchSize);
discriminator.Gradient(discriminator.parameter, numFunctions,
noiseGradientDiscriminator, batchSize);