private void TrainNeuralNetwork()
        {
            Debug.WriteLine("MyNN: Learning Started");
            m_BPLearning = new BackPropagationLearning(m_network, m_learningRate, m_momentum, m_goal);
            double[][] input;
            double[][] output;
            int        maxEpochs = 500;

            CreateInputOutput(out input, out output);
            if (input == null && output == null)
            {
                return; //network is too small (needs to be recreated)
            }
            double error = m_BPLearning.Train(input, output, ref maxEpochs);

            Debug.WriteLine(string.Format("MyNN trained: {0} epochs, {1} error", maxEpochs, error));
            if (m_saveIsRequired)
            {
                m_saveIsRequired = false;
                FileOptions.SaveTrainingSet(m_curveSets);
                m_curveSets = null;
                FileOptions.SaveNeuralNetwork(m_network);
            }

            OnNetworkLearnt(error, maxEpochs);
        }