/// <summary>
        /// Thread for letter training
        /// </summary>
        private void trainLetterThread()
        {
            pictureBoxOne.Image = data[0];
            aiTextBox.Invoke(new Action(() =>
            {
                aiTextBox.Text += "\n" + labelsLetter[0];
            }));

            double[][] transformedData = LetterNN.transformBitmapdata(data);
            int        epochs          = 30;
            int        batchSize       = 10;

            double[][] trainData      = null;
            double[][] validset       = null;
            char[]     trainLabels    = null;
            char[]     validsetLabels = null;
            int        testDataLength = 70000;

            if (labelsLetter.Length == 88800)
            {
                LetterNN.splitIntoTrainAndValidset(transformedData, out trainData, out validset, testDataLength);
                LetterNN.splitIntoTrainAndValidsetLabels(labelsLetter, out trainLabels, out validsetLabels, testDataLength);
            }
            Train <char> .trainNetwork(letterNN, trainData, validset, labelsLetter, validsetLabels, epochs, batchSize, aiTextBox);

            pictureBoxAI.Image = Properties.Resources.ai;
        }
 /// <summary>
 /// Determine the drawn image and determine the output
 /// </summary>
 /// <param name="sender">sender object</param>
 /// <param name="e">event</param>
 private void aiDetermineButton_Click(object sender, EventArgs e)
 {
     if (digitNN != null)
     {
         double[] input  = DigitNN.transformBitmapdata(B);
         byte     result = digitNN.determine(input);
         if (aiTextBox.Lines.Length == 6)
         {
             NeuralNetwork.CustomTextBox temp = new NeuralNetwork.CustomTextBox();
             for (int i = 1; i < aiTextBox.Lines.Length; i++)
             {
                 temp.Text += aiTextBox.Lines[i] + "\n";
             }
             temp.Text     += "I think it is a " + result + " :)";
             aiTextBox.Text = temp.Text;
         }
         else
         {
             aiTextBox.Text += "\nI think it is a " + result + " :)";
         }
     }
     if (letterNN != null)
     {
         double[] input  = LetterNN.transformBitmapdata(B);
         char     result = letterNN.determine(input);
         if (aiTextBox.Lines.Length == 6)
         {
             NeuralNetwork.CustomTextBox temp = new NeuralNetwork.CustomTextBox();
             for (int i = 1; i < aiTextBox.Lines.Length; i++)
             {
                 temp.Text += aiTextBox.Lines[i] + "\n";
             }
             if (result != 0)
             {
                 temp.Text += "I think it is a " + result + " :)";
             }
             else
             {
                 temp.Text += "I'm not sure :(";
             }
             aiTextBox.Text = temp.Text;
         }
         else
         {
             if (result != 0)
             {
                 aiTextBox.Text += "\nI think it is a " + result + " :)";
             }
             else
             {
                 aiTextBox.Text += "\nI'm not sure :(";
             }
         }
     }
 }