diff --git a/gui/NeuroUI/MNIST Database/t10k-images.idx3-ubyte b/gui/NeuroUI/MNIST Database/t10k-images.idx3-ubyte new file mode 100644 index 0000000..1170b2c Binary files /dev/null and b/gui/NeuroUI/MNIST Database/t10k-images.idx3-ubyte differ diff --git a/gui/NeuroUI/MNIST Database/t10k-labels.idx1-ubyte b/gui/NeuroUI/MNIST Database/t10k-labels.idx1-ubyte new file mode 100644 index 0000000..d1c3a97 Binary files /dev/null and b/gui/NeuroUI/MNIST Database/t10k-labels.idx1-ubyte differ diff --git a/gui/NeuroUI/MNIST Database/train-images.idx3-ubyte b/gui/NeuroUI/MNIST Database/train-images.idx3-ubyte new file mode 100644 index 0000000..bbce276 Binary files /dev/null and b/gui/NeuroUI/MNIST Database/train-images.idx3-ubyte differ diff --git a/gui/NeuroUI/MNIST Database/train-labels.idx1-ubyte b/gui/NeuroUI/MNIST Database/train-labels.idx1-ubyte new file mode 100644 index 0000000..d6b4c5d Binary files /dev/null and b/gui/NeuroUI/MNIST Database/train-labels.idx1-ubyte differ diff --git a/gui/NeuroUI/NeuroUI.pro b/gui/NeuroUI/NeuroUI.pro index cd77734..7b35e9c 100644 --- a/gui/NeuroUI/NeuroUI.pro +++ b/gui/NeuroUI/NeuroUI.pro @@ -19,7 +19,7 @@ SOURCES += main.cpp\ ../../Neuron.cpp \ netlearner.cpp \ errorplotter.cpp \ - trainingdataloader.cpp + mnistloader.cpp HEADERS += neuroui.h \ ../../Layer.h \ @@ -27,7 +27,7 @@ HEADERS += neuroui.h \ ../../Neuron.h \ netlearner.h \ errorplotter.h \ - trainingdataloader.h + mnistloader.h FORMS += neuroui.ui diff --git a/gui/NeuroUI/mnistloader.cpp b/gui/NeuroUI/mnistloader.cpp new file mode 100644 index 0000000..853c979 --- /dev/null +++ b/gui/NeuroUI/mnistloader.cpp @@ -0,0 +1,12 @@ +#include "mnistloader.h" + +MnistLoader::MnistLoader() +{ + +} + +void MnistLoader::load(const std::string &databaseFileName, const std::string &labelsFileName) +{ + +} + diff --git a/gui/NeuroUI/mnistloader.h b/gui/NeuroUI/mnistloader.h new file mode 100644 index 0000000..f277eba --- /dev/null +++ b/gui/NeuroUI/mnistloader.h @@ -0,0 +1,14 @@ +#ifndef MNISTLOADER_H +#define MNISTLOADER_H + +#include + +class MnistLoader +{ +public: + MnistLoader(); + + void load(const std::string &databaseFileName, const std::string &labelsFileName); +}; + +#endif // MNISTLOADER_H diff --git a/gui/NeuroUI/netlearner.cpp b/gui/NeuroUI/netlearner.cpp index 7e15e6a..59147c9 100644 --- a/gui/NeuroUI/netlearner.cpp +++ b/gui/NeuroUI/netlearner.cpp @@ -1,6 +1,6 @@ #include "netlearner.h" #include "../../Net.h" -#include "trainingdataloader.h" +#include "mnistloader.h" #include #include @@ -14,27 +14,9 @@ void NetLearner::run() emit logMessage("Loading training data..."); emit progress(0.0); - TrainingDataLoader dataLoader; - dataLoader.addSamples("../NeuroUI/training data/mnist_train0.jpg", 0); - emit progress(0.1); - dataLoader.addSamples("../NeuroUI/training data/mnist_train1.jpg", 1); - emit progress(0.2); - dataLoader.addSamples("../NeuroUI/training data/mnist_train2.jpg", 2); - emit progress(0.3); - dataLoader.addSamples("../NeuroUI/training data/mnist_train3.jpg", 3); - emit progress(0.4); - dataLoader.addSamples("../NeuroUI/training data/mnist_train4.jpg", 4); - emit progress(0.5); - dataLoader.addSamples("../NeuroUI/training data/mnist_train5.jpg", 5); - emit progress(0.6); - dataLoader.addSamples("../NeuroUI/training data/mnist_train6.jpg", 6); - emit progress(0.7); - dataLoader.addSamples("../NeuroUI/training data/mnist_train7.jpg", 7); - emit progress(0.8); - dataLoader.addSamples("../NeuroUI/training data/mnist_train8.jpg", 8); - emit progress(0.9); - dataLoader.addSamples("../NeuroUI/training data/mnist_train9.jpg", 9); - emit progress(1.0); + MnistLoader mnistLoader; + mnistLoader.load("../NeuroUI/MNIST Aatabase/train-images.idx3-ubyte", + "../NeuroUI/MNIST Aatabase/train-labels.idx1-ubyte"); emit logMessage("done"); emit progress(0.0); @@ -46,25 +28,12 @@ void NetLearner::run() size_t numIterations = 10000; for (size_t iteration = 0; iteration < numIterations; ++iteration) { - const TrainingDataLoader::Sample &trainingSample = dataLoader.getRandomSample(); - - QImage sampleImage(32, 32, QImage::Format_ARGB32); - for (unsigned int y = 0; y < 32; ++y) - { - for (unsigned int x = 0; x < 32; ++x) - { - uchar grayValue = trainingSample.second[x + y * 32] * 255; - sampleImage.setPixel(x, y, qRgb(grayValue, grayValue, grayValue)); - } - } - emit sampleImageLoaded(sampleImage); - std::vector targetValues = { - trainingSample.first / 10.0 + //trainingSample.first / 10.0 }; - digitClassifier.feedForward(trainingSample.second); + //digitClassifier.feedForward(trainingSample.second); std::vector outputValues = digitClassifier.getOutput(); diff --git a/gui/NeuroUI/training data/mnist_test0.jpg b/gui/NeuroUI/training data/mnist_test0.jpg deleted file mode 100644 index 6bbb4ed..0000000 Binary files a/gui/NeuroUI/training data/mnist_test0.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test1.jpg b/gui/NeuroUI/training data/mnist_test1.jpg deleted file mode 100644 index 1b0bf1b..0000000 Binary files a/gui/NeuroUI/training data/mnist_test1.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test2.jpg b/gui/NeuroUI/training data/mnist_test2.jpg deleted file mode 100644 index 2a43628..0000000 Binary files a/gui/NeuroUI/training data/mnist_test2.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test3.jpg b/gui/NeuroUI/training data/mnist_test3.jpg deleted file mode 100644 index c2ecd3d..0000000 Binary files a/gui/NeuroUI/training data/mnist_test3.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test4.jpg b/gui/NeuroUI/training data/mnist_test4.jpg deleted file mode 100644 index d9d7403..0000000 Binary files a/gui/NeuroUI/training data/mnist_test4.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test5.jpg b/gui/NeuroUI/training data/mnist_test5.jpg deleted file mode 100644 index 690c41a..0000000 Binary files a/gui/NeuroUI/training data/mnist_test5.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test6.jpg b/gui/NeuroUI/training data/mnist_test6.jpg deleted file mode 100644 index f9e2b68..0000000 Binary files a/gui/NeuroUI/training data/mnist_test6.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test7.jpg b/gui/NeuroUI/training data/mnist_test7.jpg deleted file mode 100644 index 4977a56..0000000 Binary files a/gui/NeuroUI/training data/mnist_test7.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test8.jpg b/gui/NeuroUI/training data/mnist_test8.jpg deleted file mode 100644 index 2a0f448..0000000 Binary files a/gui/NeuroUI/training data/mnist_test8.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_test9.jpg b/gui/NeuroUI/training data/mnist_test9.jpg deleted file mode 100644 index 8449caa..0000000 Binary files a/gui/NeuroUI/training data/mnist_test9.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train0.jpg b/gui/NeuroUI/training data/mnist_train0.jpg deleted file mode 100644 index b0361f9..0000000 Binary files a/gui/NeuroUI/training data/mnist_train0.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train1.jpg b/gui/NeuroUI/training data/mnist_train1.jpg deleted file mode 100644 index d8714ae..0000000 Binary files a/gui/NeuroUI/training data/mnist_train1.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train2.jpg b/gui/NeuroUI/training data/mnist_train2.jpg deleted file mode 100644 index eb4a392..0000000 Binary files a/gui/NeuroUI/training data/mnist_train2.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train3.jpg b/gui/NeuroUI/training data/mnist_train3.jpg deleted file mode 100644 index b06eb9a..0000000 Binary files a/gui/NeuroUI/training data/mnist_train3.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train4.jpg b/gui/NeuroUI/training data/mnist_train4.jpg deleted file mode 100644 index 276fe02..0000000 Binary files a/gui/NeuroUI/training data/mnist_train4.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train5.jpg b/gui/NeuroUI/training data/mnist_train5.jpg deleted file mode 100644 index bea57c7..0000000 Binary files a/gui/NeuroUI/training data/mnist_train5.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train6.jpg b/gui/NeuroUI/training data/mnist_train6.jpg deleted file mode 100644 index c87edfe..0000000 Binary files a/gui/NeuroUI/training data/mnist_train6.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train7.jpg b/gui/NeuroUI/training data/mnist_train7.jpg deleted file mode 100644 index a2a830f..0000000 Binary files a/gui/NeuroUI/training data/mnist_train7.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train8.jpg b/gui/NeuroUI/training data/mnist_train8.jpg deleted file mode 100644 index e49977b..0000000 Binary files a/gui/NeuroUI/training data/mnist_train8.jpg and /dev/null differ diff --git a/gui/NeuroUI/training data/mnist_train9.jpg b/gui/NeuroUI/training data/mnist_train9.jpg deleted file mode 100644 index dee3566..0000000 Binary files a/gui/NeuroUI/training data/mnist_train9.jpg and /dev/null differ diff --git a/gui/NeuroUI/trainingdataloader.cpp b/gui/NeuroUI/trainingdataloader.cpp deleted file mode 100644 index d40bd62..0000000 --- a/gui/NeuroUI/trainingdataloader.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "trainingdataloader.h" - -#include - -#include -#include - -TrainingDataLoader::TrainingDataLoader() -{ - -} - -void TrainingDataLoader::addSamples(const QString &sourceFile, TrainingDataLoader::SampleId sampleId) -{ - QImage sourceImage; - if (sourceImage.load(sourceFile) == false) - { - std::ostringstream errorString; - errorString << "error loading " << sourceFile.toStdString(); - - throw std::runtime_error(errorString.str()); - } - - QSize scanWindow(32, 32); - QPoint scanPosition(0, 0); - - while (scanPosition.y() + scanWindow.height() < sourceImage.height()) - { - scanPosition.setX(0); - - while (scanPosition.x() + scanWindow.width() < sourceImage.width()) - { - Sample sample; - sample.first = sampleId; - - for (int y = 0; y < scanWindow.height(); ++y) - { - for (int x = 0; x < scanWindow.width(); ++x) - { - QRgb pixelColor = sourceImage.pixel(scanPosition.x() + x, scanPosition.y() + y); - uint grayValue = qGray(pixelColor); - sample.second[x + y * scanWindow.height()] = grayValue / 255.0; - } - } - - m_samples.push_back(sample); - - scanPosition.rx() += scanWindow.width(); - } - - scanPosition.ry() += scanWindow.height(); - } -} - -const TrainingDataLoader::Sample &TrainingDataLoader::getRandomSample() const -{ - size_t sampleIndex = (std::rand() * m_samples.size()) / RAND_MAX; - - auto it = m_samples.cbegin(); - for (size_t index = 0; index < sampleIndex; ++index) - { - it++; - } - return *it; -} - diff --git a/gui/NeuroUI/trainingdataloader.h b/gui/NeuroUI/trainingdataloader.h deleted file mode 100644 index 6472255..0000000 --- a/gui/NeuroUI/trainingdataloader.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef TRAININGDATALOADER_H -#define TRAININGDATALOADER_H - -#include -#include -#include - -#include - -class TrainingDataLoader -{ -public: - using SampleData = double[32*32]; - using SampleId = unsigned int; - using Sample = std::pair; - -private: - std::list m_samples; - -public: - TrainingDataLoader(); - - void addSamples(const QString &sourceFile, SampleId sampleId); - - const Sample &getRandomSample() const; -}; - -#endif // TRAININGDATALOADER_H