module Main where import HFANN import Text.Printf fannDef :: [Int] fannDef = [2, 3, 1] main :: IO () main = do withStandardFann fannDef $ \fann -> do withTrainData "examples/xor/xor.data" $ \tdata -> do scaleInputTrainData tdata (-0.9) 0.9 scaleOutputTrainData tdata (-0.9) 0.9 -- scaleTrainData tdata (-0.7) 0.7 initWeights fann tdata --print "Steep" --setActivationSteepness fann 0.6 1 1 print "Steep layer" setActivationSteepnessLayer fann 0.6 1 print "Steep hidden" setActivationSteepnessHidden fann 0.6 print "Steep output" setActivationSteepnessOutput fann 0.6 len <- trainDataLength tdata printf "Len tdata = %d\n" len tdata2 <- duplicateTrainData tdata len2 <- trainDataLength tdata2 printf "Len tdata2 = %d\n" len2 tdata3 <- mergeTrainData tdata tdata2 len3 <- trainDataLength tdata3 printf "Len tdata3 = %d\n" len3 tdata4 <- subsetTrainData tdata3 4 4 ninp <- getTrainDataInputNodesCount tdata printf "Num inputs: %d\n" ninp nout <- getTrainDataOutputNodesCount tdata printf "Num outputs: %d\n" nout saveTrainData tdata3 "tdata3.data" getTrainingAlgorithm fann >>= printf "Train Alg: %d\n" getLearningRate fann >>= printf "Learn rate: %f\n" setLearningRate fann 0.3 getLearningRate fann >>= printf "Learn rate: %f\n" getLearningMomentum fann >>= printf "Moment: %f\n" setLearningMomentum fann 0.3 getLearningMomentum fann >>= printf "Moment: %f\n" setActivationFunctionHidden fann activationSigmoidSymmetric setActivationFunctionOutput fann activationSigmoidSymmetric setCallback fann $ \fann tdata4 ep ebr de ce -> do mse <- getMSE fann printf "Epochs %8d. MSE: %.5f. Desired-MSE: %.5f\n" ep mse de if mse < de then return True else return False getTrainErrorFunction fann >>= printf "Err func: %d\n" setTrainErrorFunction fann errorFunctionLinear getTrainErrorFunction fann >>= printf "Err func: %d\n" getTrainStopFunction fann >>= printf "Stop func: %d\n" setTrainStopFunction fann stopFunctionBit getTrainStopFunction fann >>= printf "Stop func: %d\n" getBitFailLimit fann >>= printf "Bit fail: %f\n" setBitFailLimit fann 0.0 getBitFailLimit fann >>= printf "Bit fail: %f\n" trainOnData fann tdata4 2000 100 0.00001 saveFann fann "examples/xor/xor.ann" train fann [-1, -1] [-1] res <- test fann [-1, -1] [-1] print res -- printConnections fann -- printParameters fann getInputNodesCount fann >>= print getOutputNodesCount fann >>= print getTotalNodesCount fann >>= print getConnectionsCount fann >>= print getQuickPropDecay fann >>= printf "QP decay: %f\n" setQuickPropDecay fann (-0.001) getQuickPropDecay fann >>= printf "QP decay: %f\n" getQuickPropMu fann >>= printf "QP Mu: %f\n" setQuickPropMu fann 1.5 getQuickPropMu fann >>= printf "QP Mu: %f\n" getRPROPIncreaseFactor fann >>= printf "RPROP inc: %f\n" setRPROPIncreaseFactor fann 1.5 getRPROPIncreaseFactor fann >>= printf "RPROP inc: %f\n" getRPROPDecreaseFactor fann >>= printf "RPROP dec: %f\n" setRPROPDecreaseFactor fann 0.7 getRPROPDecreaseFactor fann >>= printf "RPROP dec: %f\n" getRPROPDeltaMin fann >>= printf "RPROP delmin: %f\n" setRPROPDeltaMin fann 0.1 getRPROPDeltaMin fann >>= printf "RPROP delmin: %f\n" getRPROPDeltaMax fann >>= printf "RPROP delmax: %f\n" setRPROPDeltaMax fann 80 getRPROPDeltaMax fann >>= printf "RPROP delmax: %f\n" -- setActivationFunction fann fannSigmoidStepwise 1 3 setActivationFunctionLayer fann activationSigmoidStepwise 1 shuffleTrainData tdata4 mse <- trainEpoch fann tdata4 print mse res <- runFann fann [1, -1] print res destroyTrainData tdata2 destroyTrainData tdata3 destroyTrainData tdata4