Demonstration in Python (Demo.py)

Accueil  Précédent  Suivant

# -*- coding: ISO-8859-15 -*-

#=================================================

#  Module  Demo.py

#

#  Demo de la DLL NDK

#

#  Author: Jean-Luc PLOIX  -  NETRAL

#  Mai 2008

#=================================================

 

from ctypes import windll, byref, c_char, c_double, c_long

import const as C

from monaldecl import TModelData

from testfiles import createdata11

     

def createmodel(NInput, NOutput, NHidden, modelfilename=""):  

  NData = TModelData(NInput, NOutput, NHidden)

  monal = windll.LoadLibrary( "MonaEx70.dll" )

  monal.OpenLibrary(0)

  Hndl = monal.CreateNewModel(byref(NData), 1)

  if modelfilename:

      monal.SaveModel(Hndl, modelfilename)

  return monal, Hndl

 

def destroymodel(monal, Hndl):

  monal.DestroyModel(Hndl)

  monal.CloseLibrary()

 

def preparemodel():

  datafile = "$$$.csv"

     

  createdata11(datafile)

  monal, Hndl = createmodel(1, 1, 2)

  monal.SetRandSeed(1947)

  monal.SetTrainingSet(Hndl, datafile, 1, 37, c_char(';'));

  monal.ModelAction(Hndl, C.maLoadTrainingData)

  monal.SetRealValue(Hndl, 1, c_double(0.1), C.rpIniDev);

  monal.ModelAction(Hndl, C.maNormalizeData)

  return monal, Hndl

 

def modelappris(verbose=1):

  monal, Hndl = preparemodel()

  if verbose:

      vec = (c_double*monal.GetVector(Hndl, None, 0, 0))()

      monal.GetVector(Hndl, byref(vec), 0, 0)

      print "first data line", vec[0], vec[1]  # verify the first data line

      monal.GetVector(Hndl, byref(vec), 36, 0)

      print "last data line", vec[0], vec[1]  # verify the last data line

      cost = c_double(0)

      monal.GetRealValue(Hndl, 1, byref(cost), C.rpCost)

      print "cost before training", cost.value

  Number = c_long(25)

  res = monal.Train(Hndl, byref(Number), C.TrS_InitParam, None)

  if verbose:

      cost.value = 0

      monal.GetRealValue(Hndl, 1, byref(cost), C.rpCost)

      print "cost after training", cost.value

  if verbose:

      destroymodel(monal, Hndl)

      return "train cycles: %s"% Number.value

  else:

      return monal, Hndl

 

def demo1(modelfilename="MyModel.nml"):

  monal, res = createmodel(4, 1, 3, modelfilename)

  N = monal.GetText(res, 0, 0, C.gt_ProductInfo, None)

  val = (c_char*N)()

  monal.GetText(res, 0, 0, C.gt_ProductInfo, byref(val))

  print val.value

#    N = monal.TestFile(modelfilename)

#    print "Type de fichier", N

  monal.DestroyModel(res)

  return res  

 

def demo2():

  monal, Hndl = createmodel(4, 1, 3)

  monal.SetRandSeed(1947)

  # initialisation des parametres

  monal.ModelAction(Hndl, C.maInitParams)

  input = (c_double*4)()

  for i in xrange ( 4 ):

      input[i] = 0.0

  output = c_double(0)

  monal.Transfer(Hndl, byref(input), byref(output), None, None, 0, C.trSimple)

  monal.DestroyModel(Hndl)

  return output.value

 

def demo3(verbose=1):

  monal, Hndl = modelappris(0)

  monal.SetRealValue(Hndl, 0, c_double(0.95), C.rpConfLevel)

  monal.ModelAction(Hndl, C.maConfidenceComputation)

  if verbose:

      vec = (c_double*monal.GetVector(Hndl, None, 0, C.veLeverages))()

      monal.GetVector(Hndl, byref(vec), 0, C.veLeverages)

      cum=0

      print "liste des leviers :"

      for val in vec:

          print val

          cum = cum + val

      ns = monal.GetInfo(Hndl, 5)

      destroymodel(monal, Hndl)

      return "Somme des leviers = %s à %s près"% (ns, ns-cum)

  else:

      return monal, Hndl

     

if __name__ == "__main__":

  print demo1(), "must be 1"

  print demo2(), "must be -0.0414775353794"

  print demo3()

  print "Done"

 


NETRAL Neuro Developer Kit version 7.0