From 3c730f053d53b35963b01248313ec876df8ffefe Mon Sep 17 00:00:00 2001 From: Marcin Junczys-Dowmunt Date: Wed, 14 Sep 2016 23:36:05 +0200 Subject: [PATCH 1/3] Tidying up --- src/validate_mnist.cu | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/validate_mnist.cu b/src/validate_mnist.cu index 510b8dd4..f4fb76be 100644 --- a/src/validate_mnist.cu +++ b/src/validate_mnist.cu @@ -12,40 +12,31 @@ int main(int argc, char** argv) { const size_t IMAGE_SIZE = 784; const size_t LABEL_SIZE = 10; - int numofdata; - + std::cerr << "Loading test set..."; std::vector testImages = datasets::mnist::ReadImages("../examples/mnist/t10k-images-idx3-ubyte", numofdata, IMAGE_SIZE); std::vector testLabels = datasets::mnist::ReadLabels("../examples/mnist/t10k-labels-idx1-ubyte", numofdata, LABEL_SIZE); - std::cerr << "\tDone." << std::endl; + std::cerr << "Done." << std::endl; + const size_t BATCH_SIZE = testLabels.size(); + std::cerr << "Loading model params..."; NpzConverter converter("../scripts/test_model/model.npz"); - std::vector wData; - Shape wShape; + std::vector wData, bData; + Shape wShape, bShape; converter.Load("weights", wData, wShape); - - std::vector bData; - Shape bShape; converter.Load("bias", bData, bShape); - auto initW = [wData](Tensor t) { - t.set(wData); - }; - - auto initB = [bData](Tensor t) { - t.set(bData); - }; - - std::cerr << "\tDone." << std::endl; - + std::cerr << "Done." << std::endl; auto x = input(shape={whatevs, IMAGE_SIZE}, name="X"); auto y = input(shape={whatevs, LABEL_SIZE}, name="Y"); - auto w = param(shape={IMAGE_SIZE, LABEL_SIZE}, name="W0", init=initW); - auto b = param(shape={1, LABEL_SIZE}, name="b0", init=initB); + auto w = param(shape={IMAGE_SIZE, LABEL_SIZE}, name="W0", + init=[wData](Tensor t) { t.set(wData); }); + auto b = param(shape={1, LABEL_SIZE}, name="b0", + init=[bData](Tensor t) {t.set(bData); }); std::cerr << "Building model..."; auto predict = softmax(dot(x, w) + b, @@ -61,7 +52,7 @@ int main(int argc, char** argv) { x = xt << testImages; y = yt << testLabels; - graph.forward(numofdata); + graph.forward(BATCH_SIZE); auto results = predict.val(); graph.backward(); @@ -85,7 +76,7 @@ int main(int argc, char** argv) { //} //std::cerr << ")" << std::endl; } - std::cerr << "ACC: " << float(acc)/numofdata << std::endl; + std::cerr << "Accuracy: " << float(acc)/BATCH_SIZE << std::endl; return 0; } From 73e1d5f96ad1b9d14caba655c86e90b5c37564d4 Mon Sep 17 00:00:00 2001 From: Marcin Junczys-Dowmunt Date: Wed, 14 Sep 2016 23:39:24 +0200 Subject: [PATCH 2/3] renamed num of data to BATCH_SIZE --- src/validate_mnist.cu | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/validate_mnist.cu b/src/validate_mnist.cu index f4fb76be..56023304 100644 --- a/src/validate_mnist.cu +++ b/src/validate_mnist.cu @@ -12,13 +12,13 @@ int main(int argc, char** argv) { const size_t IMAGE_SIZE = 784; const size_t LABEL_SIZE = 10; + int BATCH_SIZE = 10000; std::cerr << "Loading test set..."; - std::vector testImages = datasets::mnist::ReadImages("../examples/mnist/t10k-images-idx3-ubyte", numofdata, IMAGE_SIZE); - std::vector testLabels = datasets::mnist::ReadLabels("../examples/mnist/t10k-labels-idx1-ubyte", numofdata, LABEL_SIZE); + std::vector testImages = datasets::mnist::ReadImages("../examples/mnist/t10k-images-idx3-ubyte", BATCH_SIZE, IMAGE_SIZE); + std::vector testLabels = datasets::mnist::ReadLabels("../examples/mnist/t10k-labels-idx1-ubyte", BATCH_SIZE, LABEL_SIZE); std::cerr << "Done." << std::endl; - const size_t BATCH_SIZE = testLabels.size(); std::cerr << "Loading model params..."; NpzConverter converter("../scripts/test_model/model.npz"); @@ -43,19 +43,18 @@ int main(int argc, char** argv) { axis=1, name="pred"); auto graph = -mean(sum(y * log(predict), axis=1), axis=0, name="cost"); - std::cerr << "Done." << std::endl; - Tensor xt({numofdata, IMAGE_SIZE}); - Tensor yt({numofdata, LABEL_SIZE}); + Tensor xt({BATCH_SIZE, IMAGE_SIZE}); + Tensor yt({BATCH_SIZE, LABEL_SIZE}); x = xt << testImages; y = yt << testLabels; graph.forward(BATCH_SIZE); - auto results = predict.val(); graph.backward(); + auto results = predict.val(); std::vector resultsv(results.size()); resultsv << results; From cc4e24b3a6fe2ece4709bae1851f9589de7eab7d Mon Sep 17 00:00:00 2001 From: Marcin Junczys-Dowmunt Date: Wed, 14 Sep 2016 23:41:44 +0200 Subject: [PATCH 3/3] fixed begin/end in Tensor class --- src/tensor.h | 8 ++++---- src/validate_mnist.cu | 8 +------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/tensor.h b/src/tensor.h index 66690427..40bca4f8 100644 --- a/src/tensor.h +++ b/src/tensor.h @@ -178,12 +178,12 @@ class Tensor { return pimpl_->begin(); } - auto end() -> decltype( pimpl_->begin() ) { - return pimpl_->begin(); + auto end() -> decltype( pimpl_->end() ) { + return pimpl_->end(); } - auto end() const -> decltype( pimpl_->begin() ) { - return pimpl_->begin(); + auto end() const -> decltype( pimpl_->end() ) { + return pimpl_->end(); } const Shape& shape() const { diff --git a/src/validate_mnist.cu b/src/validate_mnist.cu index 56023304..6342a822 100644 --- a/src/validate_mnist.cu +++ b/src/validate_mnist.cu @@ -27,9 +27,9 @@ int main(int argc, char** argv) { Shape wShape, bShape; converter.Load("weights", wData, wShape); converter.Load("bias", bData, bShape); - std::cerr << "Done." << std::endl; + std::cerr << "Building model..."; auto x = input(shape={whatevs, IMAGE_SIZE}, name="X"); auto y = input(shape={whatevs, LABEL_SIZE}, name="Y"); @@ -38,7 +38,6 @@ int main(int argc, char** argv) { auto b = param(shape={1, LABEL_SIZE}, name="b0", init=[bData](Tensor t) {t.set(bData); }); - std::cerr << "Building model..."; auto predict = softmax(dot(x, w) + b, axis=1, name="pred"); auto graph = -mean(sum(y * log(predict), axis=1), @@ -69,11 +68,6 @@ int main(int argc, char** argv) { if (resultsv[i + j] > resultsv[i + predicted]) predicted = j; } acc += (correct == predicted); - //std::cerr << correct << " | " << predicted << " ( "; - //for (size_t j = 0; j < LABEL_SIZE; ++j) { - // std::cerr << resultsv[i+j] << " "; - //} - //std::cerr << ")" << std::endl; } std::cerr << "Accuracy: " << float(acc)/BATCH_SIZE << std::endl;