26 #include <boost/thread/thread.hpp>
27 #include <boost/bind.hpp>
29 #include <importers/MNISTMatrixImporter.hpp>
31 #include <logger/Log.hpp>
32 #include <logger/ConsoleOutput.hpp>
33 using namespace mic::logger;
35 #include <application/ApplicationState.hpp>
37 #include <configuration/ParameterServer.hpp>
39 #include <opengl/visualization/WindowManager.hpp>
40 #include <opengl/visualization/WindowGrayscaleBatch.hpp>
41 #include <opengl/visualization/WindowCollectorChart.hpp>
42 using namespace mic::opengl::visualization;
46 using namespace mic::mlnn;
49 #include <encoders/MatrixXfMatrixXfEncoder.hpp>
50 #include <encoders/UIntMatrixXfEncoder.hpp>
63 mic::importers::MNISTMatrixImporter<float>*
importer;
73 const char*
fileName =
"nn_autoencoder_weights_visualization.txt";
101 LOG(LINFO) <<
"Generated new neural network";
109 size_t iteration = 0;
116 while (!APP_STATE->Quit()) {
119 if (!APP_STATE->isPaused()) {
122 if (APP_STATE->isSingleStepModeOn())
123 APP_STATE->pressPause();
126 APP_DATA_SYNCHRONIZATION_SCOPED_LOCK();
129 mic::types::MNISTBatch<float> bt =
importer->getRandomBatch();
132 mic::types::MatrixXfPtr encoded_batch =
mnist_encoder->encodeBatch(bt.data());
133 mic::types::MatrixXfPtr encoded_labels =
label_encoder->encodeBatch(bt.labels());
136 float loss =
neural_net.
train (encoded_batch, encoded_batch, 0.001, 0.0001);
138 if (iteration%10 == 0) {
140 std::shared_ptr<mic::mlnn::fully_connected::Linear<float> > lin1 =
142 w_conv10->setBatchUnsynchronized(lin1->getInputActivations());
143 w_conv11->setBatchUnsynchronized(lin1->getInputGradientActivations());
144 w_conv12->setBatchUnsynchronized(lin1->getWeightActivations());
145 w_conv13->setBatchUnsynchronized(lin1->getWeightGradientActivations());
146 w_conv14->setBatchUnsynchronized(lin1->getOutputActivations());
147 w_conv15->setBatchUnsynchronized(lin1->getOutputGradientActivations());
149 w_conv20->setBatchUnsynchronized(lin1->getInverseWeightActivations());
150 w_conv21->setBatchUnsynchronized(lin1->getInverseOutputActivations());
159 collector_ptr->addDataToContainer(
"Reconstruction Error", reconstruction_error);
165 LOG(LINFO) <<
"Iteration: " << iteration <<
" loss =" << loss;
185 int main(
int argc,
char* argv[]) {
187 LOGGER->addOutput(
new ConsoleOutput());
188 LOG(LINFO) <<
"Logger initialized. Starting application";
191 PARAM_SERVER->parseApplicationParameters(argc, argv);
197 importer =
new mic::importers::MNISTMatrixImporter<float>();
201 mnist_encoder =
new mic::encoders::MatrixXfMatrixXfEncoder(28, 28);
205 PARAM_SERVER->loadPropertiesFromConfiguration();
208 PARAM_SERVER->initializePropertyDependentVariables();
211 VGL_MANAGER->initializeGLUT(argc, argv);
214 w_conv10 =
new WindowGrayscaleBatch<float>(
"Lin1 x", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 50, 50, 256, 256);
215 w_conv11 =
new WindowGrayscaleBatch<float>(
"Lin1 dx", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 316, 50, 256, 256);
216 w_conv12 =
new WindowGrayscaleBatch<float>(
"Lin1 W", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 562, 50, 256, 256);
217 w_conv13 =
new WindowGrayscaleBatch<float>(
"Lin1 dW", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 818, 50, 256, 256);
218 w_conv14 =
new WindowGrayscaleBatch<float>(
"Lin1 y", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 1074, 50, 256, 256);
219 w_conv15 =
new WindowGrayscaleBatch<float>(
"Lin1 dy", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 1330, 50, 256, 256);
221 w_conv20 =
new WindowGrayscaleBatch<float>(
"Lin1 inverse neuron activation", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 50, 336, 256, 256);
222 w_conv21 =
new WindowGrayscaleBatch<float>(
"Lin1 inverse output activation", WindowGrayscaleBatch<float>::Norm_HotCold, WindowGrayscaleBatch<float>::Grid_Both, 316, 336, 256, 256);
236 w_chart =
new WindowCollectorChart<float>(
"Statistics", 60, 878, 512, 256);
237 collector_ptr= std::make_shared < mic::utils::DataCollector<std::string, float> >( );
238 w_chart->setDataCollectorPtr(collector_ptr);
241 collector_ptr->createContainer(
"Loss", mic::types::color_rgba(255, 0, 0, 180));
242 collector_ptr->createContainer(
"Reconstruction Error", mic::types::color_rgba(255, 255, 255, 180));
247 VGL_MANAGER->startVisualizationLoop();
249 LOG(LINFO) <<
"Waiting for threads to join...";
252 LOG(LINFO) <<
"Threads joined - ending application";
BackpropagationNeuralNetwork< float > neural_net
Multi-layer neural network.
WindowGrayscaleBatch< float > * w_conv23
Class implementing cropping operation - crops the size of image (matrix) by a margin of n pixels on e...
WindowGrayscaleBatch< float > * w_conv11
WindowCollectorChart< float > * w_chart
Window for displaying chart with statistics.
WindowGrayscaleBatch< float > * w_conv20
WindowGrayscaleBatch< float > * w_conv15
mic::encoders::MatrixXfMatrixXfEncoder * mnist_encoder
MNIST matrix encoder.
WindowGrayscaleBatch< float > * w_conv12
WindowGrayscaleBatch< float > * w_conv22
mic::encoders::UIntMatrixXfEncoder * label_encoder
Label 2 matrix encoder (1 hot).
std::shared_ptr< LayerType > getLayer(size_t index_)
WindowGrayscaleBatch< float > * w_conv34
WindowGrayscaleBatch< float > * w_conv32
WindowGrayscaleBatch< float > * w_conv35
WindowGrayscaleBatch< float > * w_conv14
void batch_function(void)
Function for batch sampling.
mic::importers::MNISTMatrixImporter< float > * importer
MNIST importer.
WindowGrayscaleBatch< float > * w_conv10
Windows for displaying activations.
WindowGrayscaleBatch< float > * w_conv25
WindowGrayscaleBatch< float > * w_conv30
WindowGrayscaleBatch< float > * w_conv21
int main(int argc, char *argv[])
Main program function. Runs two threads: main (for GLUT) and another one (for data processing)...
WindowGrayscaleBatch< float > * w_conv31
WindowGrayscaleBatch< float > * w_conv13
WindowGrayscaleBatch< float > * w_conv33
eT train(mic::types::MatrixPtr< eT > encoded_batch_, mic::types::MatrixPtr< eT > encoded_targets_, eT learning_rate_, eT decay_=0.0f)
mic::utils::DataCollectorPtr< std::string, float > collector_ptr
Data collector .
WindowGrayscaleBatch< float > * w_conv24
Class implementing padding operation - expanding the size of image (matrix) by a margin of n pixels o...
Adam - adaptive moment estimation.
void pushLayer(LayerType *layer_ptr_)