diff --git a/src/mlpack/methods/ann/loss_functions/negative_log_likelihood_impl.hpp b/src/mlpack/methods/ann/loss_functions/negative_log_likelihood_impl.hpp index f9020a582f..2b7dcb9fe3 100644 --- a/src/mlpack/methods/ann/loss_functions/negative_log_likelihood_impl.hpp +++ b/src/mlpack/methods/ann/loss_functions/negative_log_likelihood_impl.hpp @@ -35,11 +35,10 @@ NegativeLogLikelihood::Forward( ElemType output = 0; for (size_t i = 0; i < input.n_cols; ++i) { - size_t currentTarget = target(i) - 1; - Log::Assert(currentTarget >= 0 && currentTarget < input.n_rows, + Log::Assert(target(i) >= 0 && target(i) < input.n_rows, "Target class out of range."); - output -= input(currentTarget, i); + output -= input(target(i), i); } return output; @@ -55,11 +54,10 @@ void NegativeLogLikelihood::Backward( output = arma::zeros(input.n_rows, input.n_cols); for (size_t i = 0; i < input.n_cols; ++i) { - size_t currentTarget = target(i) - 1; - Log::Assert(currentTarget >= 0 && currentTarget < input.n_rows, + Log::Assert(target(i) >= 0 && target(i) < input.n_rows, "Target class out of range."); - output(currentTarget, i) = -1; + output(target(i), i) = -1; } } diff --git a/src/mlpack/tests/ann_layer_test.cpp b/src/mlpack/tests/ann_layer_test.cpp index 8cd06e56f5..3bba999878 100644 --- a/src/mlpack/tests/ann_layer_test.cpp +++ b/src/mlpack/tests/ann_layer_test.cpp @@ -90,7 +90,7 @@ BOOST_AUTO_TEST_CASE(GradientAddLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -422,7 +422,7 @@ BOOST_AUTO_TEST_CASE(GradientLinearLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -498,7 +498,7 @@ BOOST_AUTO_TEST_CASE(GradientNoisyLinearLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -602,7 +602,7 @@ BOOST_AUTO_TEST_CASE(GradientLinearNoBiasLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -648,7 +648,7 @@ BOOST_AUTO_TEST_CASE(JacobianNegativeLogLikelihoodLayerTest) init.Initialize(input, inputElements, 1); arma::mat target(1, 1); - target(0) = math::RandInt(1, inputElements - 1); + target(0) = math::RandInt(0, inputElements - 2); double error = JacobianPerformanceTest(module, input, target); BOOST_REQUIRE_LE(error, 1e-5); @@ -704,7 +704,7 @@ BOOST_AUTO_TEST_CASE(GradientFlexibleReLULayerTest) GradientFunction() { input = arma::randu(2, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, RandomInitialization>( NegativeLogLikelihood<>(), RandomInitialization(0.1, 0.5)); @@ -883,7 +883,7 @@ BOOST_AUTO_TEST_CASE(LSTMRrhoTest) { const size_t rho = 5; arma::cube input = arma::randu(1, 1, 5); - arma::cube target = arma::ones(1, 1, 5); + arma::cube target = arma::zeros(1, 1, 5); RandomInitialization init(0.5, 0.5); // Create model with user defined rho parameter. @@ -924,7 +924,7 @@ BOOST_AUTO_TEST_CASE(GradientLSTMLayerTest) GradientFunction() { input = arma::randu(1, 1, 5); - target.ones(1, 1, 5); + target.zeros(1, 1, 5); const size_t rho = 5; model = new RNN >(rho); @@ -988,7 +988,7 @@ BOOST_AUTO_TEST_CASE(FastLSTMRrhoTest) { const size_t rho = 5; arma::cube input = arma::randu(1, 1, 5); - arma::cube target = arma::ones(1, 1, 5); + arma::cube target = arma::zeros(1, 1, 5); RandomInitialization init(0.5, 0.5); // Create model with user defined rho parameter. @@ -1029,7 +1029,7 @@ BOOST_AUTO_TEST_CASE(GradientFastLSTMLayerTest) GradientFunction() { input = arma::randu(1, 1, 5); - target = arma::ones(1, 1, 5); + target = arma::zeros(1, 1, 5); const size_t rho = 5; model = new RNN >(rho); @@ -1298,7 +1298,7 @@ BOOST_AUTO_TEST_CASE(GradientGRULayerTest) GradientFunction() { input = arma::randu(1, 1, 5); - target = arma::ones(1, 1, 5); + target = arma::zeros(1, 1, 5); const size_t rho = 5; model = new RNN >(rho); @@ -1537,7 +1537,7 @@ BOOST_AUTO_TEST_CASE(GradientConcatLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -1606,7 +1606,7 @@ BOOST_AUTO_TEST_CASE(GradientConcatenateLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -1961,7 +1961,7 @@ BOOST_AUTO_TEST_CASE(GradientBatchNormTest) { input = arma::randn(32, 2048); arma::mat target; - target.ones(1, 2048); + target.zeros(1, 2048); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -2037,7 +2037,7 @@ BOOST_AUTO_TEST_CASE(GradientVirtualBatchNormTest) input = arma::randn(5, 256); arma::mat referenceBatch = arma::mat(input.memptr(), input.n_rows, 16); arma::mat target; - target.ones(1, 256); + target.zeros(1, 256); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -2099,7 +2099,7 @@ BOOST_AUTO_TEST_CASE(MiniBatchDiscriminationTest) { input = arma::randn(5, 4); arma::mat target; - target.ones(1, 4); + target.zeros(1, 4); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -2278,7 +2278,7 @@ BOOST_AUTO_TEST_CASE(GradientTransposedConvolutionLayerTest) GradientFunction() { input = arma::linspace(0, 35, 36); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, RandomInitialization>(); model->Predictors() = input; @@ -2395,7 +2395,7 @@ BOOST_AUTO_TEST_CASE(GradientAtrousConvolutionLayerTest) GradientFunction() { input = arma::linspace(0, 35, 36); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, RandomInitialization>(); model->Predictors() = input; @@ -2578,7 +2578,7 @@ BOOST_AUTO_TEST_CASE(GradientLayerNormTest) { input = arma::randn(10, 256); arma::mat target; - target.ones(1, 256); + target.zeros(1, 256); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -2899,7 +2899,7 @@ BOOST_AUTO_TEST_CASE(GradientReparametrizationLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -2943,7 +2943,7 @@ BOOST_AUTO_TEST_CASE(GradientReparametrizationLayerBetaTest) GradientFunction() { input = arma::randu(10, 2); - target = arma::mat("1 1"); + target = arma::mat("0 0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -3099,7 +3099,7 @@ BOOST_AUTO_TEST_CASE(GradientHighwayLayerTest) GradientFunction() { input = arma::randu(5, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -3151,7 +3151,7 @@ BOOST_AUTO_TEST_CASE(GradientSequentialLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -3202,7 +3202,7 @@ BOOST_AUTO_TEST_CASE(GradientWeightNormLayerTest) GradientFunction() { input = arma::randu(10, 1); - target = arma::mat("1"); + target = arma::mat("0"); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; @@ -4037,7 +4037,7 @@ BOOST_AUTO_TEST_CASE(GradientBatchNormWithMiniBatchesTest) { input = arma::randn(16, 1024); arma::mat target; - target.ones(1, 1024); + target.zeros(1, 1024); model = new FFN, NguyenWidrowInitialization>(); model->Predictors() = input; diff --git a/src/mlpack/tests/callback_test.cpp b/src/mlpack/tests/callback_test.cpp index a62ede95a8..6483a11890 100644 --- a/src/mlpack/tests/callback_test.cpp +++ b/src/mlpack/tests/callback_test.cpp @@ -92,7 +92,7 @@ BOOST_AUTO_TEST_CASE(RNNCallbackTest) { const size_t rho = 5; arma::cube input = arma::randu(1, 1, 5); - arma::cube target = arma::ones(1, 1, 5); + arma::cube target = arma::zeros(1, 1, 5); RandomInitialization init(0.5, 0.5); // Create model with user defined rho parameter. @@ -118,7 +118,7 @@ BOOST_AUTO_TEST_CASE(RNNWithOptimizerCallbackTest) { const size_t rho = 5; arma::cube input = arma::randu(1, 1, 5); - arma::cube target = arma::ones(1, 1, 5); + arma::cube target = arma::zeros(1, 1, 5); RandomInitialization init(0.5, 0.5); // Create model with user defined rho parameter. diff --git a/src/mlpack/tests/convolutional_network_test.cpp b/src/mlpack/tests/convolutional_network_test.cpp index 39a7e161c3..c266e2b28b 100644 --- a/src/mlpack/tests/convolutional_network_test.cpp +++ b/src/mlpack/tests/convolutional_network_test.cpp @@ -47,13 +47,13 @@ BOOST_AUTO_TEST_CASE(VanillaNetworkTest) { if (i < nPoints / 2) { - // Assign label "1" to all samples with digit = 4 - Y(i) = 1; + // Assign label "0" to all samples with digit = 4 + Y(i) = 0; } else { - // Assign label "2" to all samples with digit = 9 - Y(i) = 2; + // Assign label "1" to all samples with digit = 9 + Y(i) = 1; } } @@ -111,7 +111,7 @@ BOOST_AUTO_TEST_CASE(VanillaNetworkTest) for (size_t i = 0; i < predictionTemp.n_cols; ++i) { prediction(i) = arma::as_scalar(arma::find( - arma::max(predictionTemp.col(i)) == predictionTemp.col(i), 1)) + 1; + arma::max(predictionTemp.col(i)) == predictionTemp.col(i), 1)); } size_t correct = arma::accu(prediction == Y); diff --git a/src/mlpack/tests/feedforward_network_test.cpp b/src/mlpack/tests/feedforward_network_test.cpp index 47842204e6..c853962f10 100644 --- a/src/mlpack/tests/feedforward_network_test.cpp +++ b/src/mlpack/tests/feedforward_network_test.cpp @@ -52,7 +52,7 @@ void TestNetwork(ModelType& model, for (size_t i = 0; i < predictionTemp.n_cols; ++i) { prediction(i) = arma::as_scalar(arma::find( - arma::max(predictionTemp.col(i)) == predictionTemp.col(i), 1)) + 1; + arma::max(predictionTemp.col(i)) == predictionTemp.col(i), 1)); } size_t correct = arma::accu(prediction == testLabels); @@ -71,12 +71,14 @@ BOOST_AUTO_TEST_CASE(VanillaNetworkTest) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // Labels should be from 0 to numClasses - 1. arma::mat testData; data::Load("thyroid_test.csv", testData, true); arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // Labels should be from 0 to numClasses - 1. /* * Construct a feed forward network with trainData.n_rows input nodes, @@ -120,7 +122,6 @@ BOOST_AUTO_TEST_CASE(VanillaNetworkTest) arma::mat labels = arma::zeros(1, dataset.n_cols); labels.submat(0, labels.n_cols / 2, 0, labels.n_cols - 1).fill(1); - labels += 1; FFN > model1; model1.Add >(dataset.n_rows, 10); @@ -142,7 +143,6 @@ BOOST_AUTO_TEST_CASE(ForwardBackwardTest) arma::mat labels = arma::zeros(1, dataset.n_cols); labels.submat(0, labels.n_cols / 2, 0, labels.n_cols - 1).fill(1); - labels += 1; FFN > model; model.Add >(dataset.n_rows, 50); @@ -189,7 +189,7 @@ BOOST_AUTO_TEST_CASE(ForwardBackwardTest) for (size_t i = 0; i < currentResuls.n_cols; ++i) { prediction(i) = arma::as_scalar(arma::find( - arma::max(currentResuls.col(i)) == currentResuls.col(i), 1)) + 1; + arma::max(currentResuls.col(i)) == currentResuls.col(i), 1)); } size_t correct = arma::accu(prediction == currentLabels); @@ -218,12 +218,14 @@ BOOST_AUTO_TEST_CASE(DropoutNetworkTest) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // Labels should be from 0 to numClasses - 1. arma::mat testData; data::Load("thyroid_test.csv", testData, true); arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // Labels should be from 0 to numClasses - 1. /* * Construct a feed forward network with trainData.n_rows input nodes, @@ -269,7 +271,6 @@ BOOST_AUTO_TEST_CASE(DropoutNetworkTest) arma::mat labels = arma::zeros(1, dataset.n_cols); labels.submat(0, labels.n_cols / 2, 0, labels.n_cols - 1).fill(1); - labels += 1; FFN > model1; model1.Add >(dataset.n_rows, 10); @@ -295,7 +296,6 @@ BOOST_AUTO_TEST_CASE(HighwayNetworkTest) arma::mat labels = arma::zeros(1, dataset.n_cols); labels.submat(0, labels.n_cols / 2, 0, labels.n_cols - 1).fill(1); - labels += 1; FFN > model; model.Add >(dataset.n_rows, 10); @@ -319,12 +319,14 @@ BOOST_AUTO_TEST_CASE(DropConnectNetworkTest) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // The range should be between 0 and numClasses - 1. arma::mat testData; data::Load("thyroid_test.csv", testData, true); arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // The range should be between 0 and numClasses - 1. /* * Construct a feed forward network with trainData.n_rows input nodes, @@ -370,7 +372,6 @@ BOOST_AUTO_TEST_CASE(DropConnectNetworkTest) arma::mat labels = arma::zeros(1, dataset.n_cols); labels.submat(0, labels.n_cols / 2, 0, labels.n_cols - 1).fill(1); - labels += 1; FFN > model1; model1.Add >(dataset.n_rows, 10); @@ -408,12 +409,14 @@ BOOST_AUTO_TEST_CASE(SerializationTest) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // The labels should be between 0 and numClasses - 1. arma::mat testData; data::Load("thyroid_test.csv", testData, true); arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // The labels should be between 0 and numClasses - 1. // Vanilla neural net with logistic activation function. // Because 92% of the patients are not hyperthyroid the neural @@ -457,12 +460,14 @@ BOOST_AUTO_TEST_CASE(CustomLayerTest) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // The labels should be between 0 and numClasses - 1. arma::mat testData; data::Load("thyroid_test.csv", testData, true); arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // The labels should be between 0 and numClasses - 1. FFN, RandomInitialization, CustomLayer<> > model; model.Add >(trainData.n_rows, 8); @@ -536,12 +541,14 @@ BOOST_AUTO_TEST_CASE(FFNTrainReturnObjective) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // The labels should be between 0 and numClasses. arma::mat testData; data::Load("thyroid_test.csv", testData, true); arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // The labels should be between 0 and numClasses. // Vanilla neural net with logistic activation function. // Because 92% of the patients are not hyperthyroid the neural @@ -606,12 +613,14 @@ BOOST_AUTO_TEST_CASE(OptimizerTest) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // The labels should be between 0 and numClasses. arma::mat testData; data::Load("thyroid_test.csv", testData, true); arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // The labels should be between 0 and numClasses. FFN, RandomInitialization, CustomLayer<> > model; model.Add >(trainData.n_rows, 8); @@ -634,11 +643,12 @@ BOOST_AUTO_TEST_CASE(RBFNetworkTest) arma::mat trainLabels = trainData.row(trainData.n_rows - 1); trainData.shed_row(trainData.n_rows - 1); + trainLabels -= 1; // The labels should be between 0 and numClasses. arma::mat trainLabels1 = arma::zeros(3, trainData.n_cols); for (size_t i = 0; i < trainData.n_cols; i++) { - trainLabels1.col(i).row((trainLabels(i) - 1)) = 1; + trainLabels1.col(i).row(trainLabels(i)) = 1; } arma::mat testData; @@ -646,6 +656,7 @@ BOOST_AUTO_TEST_CASE(RBFNetworkTest) arma::mat testLabels = testData.row(testData.n_rows - 1); testData.shed_row(testData.n_rows - 1); + testLabels -= 1; // The labels should be between 0 and numClasses. /* * Construct a feed forward network with trainData.n_rows input nodes, @@ -681,7 +692,7 @@ BOOST_AUTO_TEST_CASE(RBFNetworkTest) } arma::mat labels = arma::zeros(1, dataset.n_cols); - labels.submat(0, labels.n_cols / 2, 0, labels.n_cols - 1).fill(1); + labels.submat(0, labels.n_cols / 2, 0, labels.n_cols - 1).fill(0); arma::mat labels1 = arma::zeros(2, dataset.n_cols); @@ -689,7 +700,6 @@ BOOST_AUTO_TEST_CASE(RBFNetworkTest) { labels1.col(i).row(labels(i)) = 1; } - labels += 1; arma::mat centroids1; arma::Row assignments; diff --git a/src/mlpack/tests/recurrent_network_test.cpp b/src/mlpack/tests/recurrent_network_test.cpp index 1bef406e26..4bd9fa25e1 100644 --- a/src/mlpack/tests/recurrent_network_test.cpp +++ b/src/mlpack/tests/recurrent_network_test.cpp @@ -93,7 +93,7 @@ BOOST_AUTO_TEST_CASE(SequenceClassificationBRNNTest) for (size_t i = 0; i < labelsTemp.n_cols; ++i) { const int value = arma::as_scalar(arma::find( - arma::max(labelsTemp.col(i)) == labelsTemp.col(i), 1)) + 1; + arma::max(labelsTemp.col(i)) == labelsTemp.col(i), 1)); labels.tube(0, i).fill(value); } @@ -168,7 +168,7 @@ BOOST_AUTO_TEST_CASE(SequenceClassificationTest) for (size_t i = 0; i < labelsTemp.n_cols; ++i) { const int value = arma::as_scalar(arma::find( - arma::max(labelsTemp.col(i)) == labelsTemp.col(i), 1)) + 1; + arma::max(labelsTemp.col(i)) == labelsTemp.col(i), 1)); labels.tube(0, i).fill(value); } @@ -212,10 +212,10 @@ BOOST_AUTO_TEST_CASE(SequenceClassificationTest) { const int predictionValue = arma::as_scalar(arma::find( arma::max(prediction.slice(rho - 1).col(i)) == - prediction.slice(rho - 1).col(i), 1) + 1); + prediction.slice(rho - 1).col(i), 1)); const int targetValue = arma::as_scalar(arma::find( - arma::max(labelsTemp.col(i)) == labelsTemp.col(i), 1)) + 1; + arma::max(labelsTemp.col(i)) == labelsTemp.col(i), 1)); if (predictionValue == targetValue) { @@ -1452,15 +1452,15 @@ BOOST_AUTO_TEST_CASE(LargeRhoValueRnnTest) { const auto strLen = strlen(line); // Responses for NegativeLogLikelihood should be - // non-one-hot-encoded class IDs (from 1 to num_classes). + // non-one-hot-encoded class IDs (from 0 to num_classes - 1). MatType result(1, 1, strLen, arma::fill::zeros); // The response is the *next* letter in the sequence. for (size_t i = 0; i < strLen - 1; ++i) { - result.at(0, 0, i) = static_cast(line[i + 1]) + 1.0; + result.at(0, 0, i) = static_cast(line[i + 1]); } // The final response is empty, so we set it to class 0. - result.at(0, 0, strLen - 1) = 1.0; + result.at(0, 0, strLen - 1) = 0.0; return result; };