open plasFridge.NeuralNetwork (* -------------------------------------------------------------------------------------------------------------------------------- *) (* Training Data *) (* -------------------------------------------------------------------------------------------------------------------------------- *) (* 0-9 Digital Training Data *) let DigitTrainingData = [ ([ 0.0;1.0;1.0;1.0;1.0;1.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;1.0;1.0;1.0;1.0;1.0;0.0 ], [ 1.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 ], [ 0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 0.0;1.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;0.0;1.0;1.0;1.0;0.0;0.0;0.0;1.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;0.0;1.0;1.0;0.0;0.0;0.0;1.0 ], [ 0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 1.0;0.0;0.0;0.0;0.0;1.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;1.0;1.0;0.0;1.0;0.0;1.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0 ], [ 0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 0.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;0.0;1.0;0.0;1.0;0.0;0.0;0.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0 ], [ 0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 1.0;1.0;1.0;0.0;0.0;1.0;0.0;1.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;1.0;1.0;0.0 ], [ 0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0 ]); ([ 0.0;0.0;1.0;1.0;1.0;1.0;0.0;0.0;1.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0 ], [ 0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0 ]); ([ 1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;1.0;1.0;1.0;0.0;1.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;0.0;0.0 ], [ 0.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0 ]); ([ 0.0;1.0;1.0;0.0;1.0;1.0;0.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;0.0;1.0;1.0;0.0;1.0;1.0;0.0 ], [ 0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0 ]); ([ 0.0;1.0;1.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;1.0;0.0;0.0;1.0;1.0;1.0;1.0;0.0;0.0 ], [ 0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0 ]); ([ 1.0;1.0;1.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0 ], [ 0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 1.0;1.0;1.0;1.0;0.0;1.0;0.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0 ], [ 0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0 ]); ([ 1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0 ], [ 0.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0 ]); ([ 0.0;1.0;0.0;0.0;0.0;1.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;1.0;0.0;1.0;0.0;1.0;0.0;1.0;1.0;0.0;1.0;1.0;0.0 ], [ 0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 1.0;0.0;0.0;0.0;0.0;1.0;1.0;1.0;0.0;0.0;0.0;1.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;1.0;0.0;0.0;0.0;0.0;1.0 ], [ 0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 1.0;1.0;1.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0 ], [ 0.0;0.0;0.0;0.0;1.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 0.0;0.0;0.0;1.0;1.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;0.0;0.0;1.0;0.0;1.0;1.0;1.0;1.0;1.0;0.0;0.0 ], [ 1.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0 ]); ([ 0.0;1.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;1.0;0.0;0.0;1.0;0.0;0.0;1.0;0.0;1.0;1.0;1.0;1.0;1.0;1.0 ], [ 0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;0.0;1.0 ]) ] (* AB || C logic training data *) let LogicTrainingData = [ (* A B C F T *) ([ 0.0;0.0;0.0 ], [ 1.0; 0.0 ]); ([ 0.0;0.0;1.0 ], [ 0.0; 1.0 ]); ([ 0.0;1.0;0.0 ], [ 1.0; 0.0 ]); ([ 0.0;1.0;1.0 ], [ 0.0; 1.0 ]); ([ 1.0;0.0;0.0 ], [ 1.0; 0.0 ]); ([ 1.0;0.0;1.0 ], [ 0.0; 1.0 ]); ([ 1.0;1.0;0.0 ], [ 0.0; 1.0 ]); ([ 1.0;1.0;1.0 ], [ 0.0; 1.0 ]) ] (* -------------------------------------------------------------------------------------------------------------------------------- *) (* Main - simple MLP with single hidden layer *) (* -------------------------------------------------------------------------------------------------------------------------------- *) let _ = let input = 3 in let hidden = 3 in let output = 2 in let activation_function = SigmoidActivationFunction in let training_data = LogicTrainingData in let max_iterations = 1000000 in let mse_threshold = 0.000001 in let learning_rate = 0.15 in let myANN = new ANN([input; hidden; output], activation_function) in myANN.Train training_data learning_rate max_iterations mse_threshold; List.iter ( fun (i,o) -> print_string "Input "; print_any i; print_string " Expected "; print_any o; print_string " ANN Output "; print_any (myANN.GetOutput(i)); print_newline(); ) training_data; read_line ()