[Python] Problema con distutils

Alberto Girardi alberto.gir747 a gmail.com
Mar 22 Ott 2019 17:00:00 CEST


Ecco il file setup.py

from distutils.core import setup


setup(
    name = 'PyNEURONE',
    version = '1.3.1',
    description = 'Leggi il file .txt nella cartella',
    long_description = open('FAQ_PyNeur.txt', 'r').read(),
    py_modules = ['Ag_Neuron'],
    author = 'Alberto Girardi',
    author_email = 'alberto.gir747 a gmail.com',
    keywords = 'python generators distutils',
    scripts = 'PyNEURONE-1.3.1.py',
    platforms = 'all',
    classifiers = ['Intended Audience::Education'
                    ]

    )


Ecco anche il file che contiene la definizione delle classi. E' abbastanza
grande, spero di non intasare troppo la mail:

import math

class Neurone:

    def __init__(self):
        self.pesi = [1, 1]
        self.learning_rate = 0.4999
        self.delta_learningrate = 0.0018
        self.errore_tot = 0

    def detPesi(self, ninputs):
        pesi = [1 for i in range( ninputs)]

    def activationFunction(self, pa):
        #soglia
       return 1/(1 + math.exp(-pa))
        #if pa> 0.0:
       #     return 1.0
       # else:
         #   return 0.0

    def output (self, inputs):
        pa = 0
        for i in range(len(inputs)):
            pa += inputs[i] * self.pesi[i]

            return self.activationFunction(pa)

    def learn(self, x, target ):
        out = self.output(x)
        errore = target - out

        for i, w in enumerate(self.pesi):

            self.pesi[i] += self.learning_rate * errore * x[i]

        print('  target : ', target, ' '*(15-len(str(target))),'
out:',out,' '*(22-len(str(out))),'  errore:',errore)

class Progetto():

    def __init__(self, neurone, nome=''):
        self.neuron = neurone
        self.nome = nome
        self.file_in = ''
        self.n_dir = ''
        self.x_data = []
        self.y_data = []
        self.prog_loc = ''"

    def creaProgetto(self, name, f_in):
        import os
        self.nome = name

        try:

            f_log = open('log_p.txt', 'r' )
            self.prog_loc = f_log.readline()
            f_log.close()

        except FileNotFoundError:


                self.prog_loc = input('\nLa cartella progetti_ML non è
presente, in che path si vuole inserire la cartella (se su Windosw usare la
\\ ):')
                f_log = open('log_p.txt', 'x' )
                f_log.write(self.prog_loc)
                f_log.close()

os.mkdir('{0}\\progetti_ML\\{1}_progetto'.format(self.prog_loc, self.nome))



        self.n_dir= '{0}\\progetti_ML\\{1}_progetto'.format(self.prog_loc,
self.nome)

        try:

            f_lp =
open('{0}\\progetti_ML\\lista_progetti.txt'.format(self.prog_loc), 'a')


            f_lp.write(self.nome+'\n')
            f_lp.close()


       # except:
            #f_lp.close()
          #  print('Problema con il file')
        except:
            pass

        import time

        try:
            with
open('{0}\\storico_progetti.txt'.format(self.prog_loc+'\\progetti_ML'),
'a') as f_s:
                f_s.write('Progetto {0} creato il {1} alle
{2}\n'.format(self.nome, time.strftime('%d/%m/%Y'),
time.strftime('%H:%M:%S')))

        except FileNotFoundError:
            f_s =
open('{0}\\storico_progetti.txt'.format(self.prog_loc+'\\progetti_ML'), 'w')
            f_s.write('Progetto {0} creato il {1}\n'.format(self.nome,
time.strftime('%d/%m/%Y alle %H:%M:%S')))
            f_s.close()



        self.file_in = self.n_dir+'\\f_inputs.csv'

        try:

            os.mkdir(self.n_dir)
            print('\nCartella creata')

        except :
            pass


        with  open(f_in,'r') as f_inp:
            with open(self.file_in, 'w') as f_inpc:

                f_inpc.write(f_inp.read())


        with open('{}\\storico.txt'.format(self.n_dir), 'w') as f_st:
            f_st.write('Progetto {0} creato il {1} alle {2}, nel percorso
"{3}".\n'.format(self.nome, time.strftime('%d/%m/%Y'),
time.strftime('%H:%M:%S'), self.n_dir))

        print('Progetto {0} creato il {1} alle {2}, nel percorso
"{3}"\nProggetto aggiunto alla lista dei progetti.'.format(self.nome,
time.strftime('%d/%m/%Y'), time.strftime('%H:%M:%S'), self.n_dir))
        print('File inputs copiato nella cartella del progetto')
        print('Progetto aggiunto allo storico')





    def mostraProgetti(self):
        with open('log_p.txt', 'r' ) as f_log:

            self.prog_loc = f_log.readline()

        f =
open('{}\\progetti_ML\\lista_progetti.txt'.format(self.prog_loc))

        with f:
            print('\n\nScegliere uno fra i seguenti progetti:\n\n',f.read())


    def getProgetto(self):
        self.nome = input('\nChe progetto si vuole caricare: ')

        with open('log_p.txt', 'r' ) as f_log:

            self.prog_loc = f_log.readline()


        self.n_dir = '{0}\\progetti_ML\\{1}_progetto'.format(self.prog_loc,
self.nome)

        with
 open('{}\\progetti_ML\\lista_progetti.txt'.format(self.prog_loc), 'r') as
f_lp:

            if self.nome in f_lp.read():
                print('Progetto esistente e caricato correttamente\n')

                with open('{}\\storico.txt'.format(self.n_dir), 'r+') as
f_st:
                    import time

                    print('\n', f_st.read())
                    f_st.write('\n\nRiapertura progetto effettuata il
{0}\n'.format(time.strftime('%d/%m/%Y alle %H:%M:%S')))
                return 0

            else:
                print('Progetto non esistente. Riprovare')
                return 1




    def getInputs_et_Pesi(self, f_in):
        self.file_in = f_in
        self.getData()

        with open(self.n_dir+'\\pesi.txt', 'r') as f_p:
            self.neuron.pesi = [float(i)  for i in
f_p.readline()[1:-1].split(', ')]


    def getPesi(self):
        self.file_in  = self.n_dir+'\\f_inputs.csv'
        self.getData()

        with open(self.n_dir+'\\pesi.txt', 'r') as f_p:
            self.neuron.pesi = [float(i)  for i in
f_p.readline()[1:-1].split(', ')]





    def getData(self):
        print('Caricamento file in corso...\n')

        self.data_x = []
        self.data_y = []

        with open(self.file_in, newline='', mode = 'r') as f_in:

            import csv
            lettore = csv.reader(f_in, delimiter = ';')

            for l in lettore:
                self.data_x.append([float(i) for i in l[:-1]])
                self.data_y.append(float(l[-1]))
                print(l)


        print('Caricamento dati completato\n')

        print('\n\n\n','data_x',self.data_x,'data_y', self.data_y)





    def AllenaNeurone(self, n_epoch):
        import time


        print('\n\n\t\t\t\t\t\t\tINIZIO ALLENAMENTO NEURONE\n\n\n\n')
        print('x train = ',self.data_x)
        print('y train = ',self.data_y)
        print("\n\nL'allenamento iniziera tra 5 secondi\n")

        import time

        with open('{0}\\storico.txt'.format(self.n_dir), 'a') as f_st:
            f_st.write('Allenamento progetto per {0} epoche iniziato il
{1}'.format( str(n_epoch), time.strftime('%d/%m/%Y alle %H:%M:%S')  ))



        for i in range(5):
            print(5-i)
            time.sleep(0.2)

        print('\nVia!!!')

        time.sleep(0.2)

        t = time.time()

        for epoch in range(n_epoch+1):

            print('\n')
            print('epoch', epoch)

            for i, x in enumerate( self.data_x):

                target = self.data_y[ i ]
                self.neuron.learn(x, target)

        te=time.time()-t

        t_e = te/n_epoch
        e_t = n_epoch/te

        print('\n\n\n')
        print('Allenamento durato :', te)
        print('Secondi per epoch  :', round(t_e, 10))
        print('Epoch al secondo   :', round(e_t, 10))

        with open('{}\\storico.txt'.format(self.n_dir), 'a') as f_st:
            f_st.write('.\nAllenamento durato {0} s, secondi/epoch {1},
epoch per secondo {2}\n\n'.format(te, t_e, e_t))




    def Predici(self):
        print('\n\n\nPredizione del neurone sugli input dati:\n')

        for i in self.data_x:
            out = self.neuron.output(i)

            print('\tinput: ', i, '  out:', out)



    def conservaPesi(self):


        f_p = open(self.n_dir+'\\pesi.txt','w')

        with f_p:
            f_p.write(str(self.neuron.pesi))

        print('\n\n\nPesi salvati correttamente in {0}\\pesi.txt
'.format(self.n_dir))


Spero l'identazione sia rimasta





Il giorno lun 21 ott 2019 alle ore 18:08 Alberto Girardi <
alberto.gir747 a gmail.com> ha scritto:

> Ah, scusate io uso questi termini, ma forse non sono corretti.
> È il classico programma di machine learning basato sul 'neurone'.
> Il neurone prende degli input, una lista (ad esempio [1.0, 0.0]), li
> moltiplica per il peso che da a ciascuna connessione (l'elemento x della
> lista), e somma questi valori, poi lo manda a una funzione di
> normalizzazione, come la sigmoide.
> C'è poi una funzione dellaclasse Neurone che datele gli input e il
> risultato che dovrebbe esserci (esempio: l'ala è larga x e lunga y allora è
> una falena di specie z)
> Iterando su una lista di questi input e output aspettati il neurone
> corregge i propri pesi, e l'errore si attenua sempre di più, tranne i casi
> in cui non converge.
>
>
>
> Il lun 21 ott 2019, 17:44 Ivo Reano <reanoivo a gmail.com> ha scritto:
>
>>
>> Cerco di creare una distribuzione del mio programmino  con distutils,
>>> cercavo anche di compilarla con pyinstaller, per passarlo a un mio amico ed
>>> a alcuni miei parenti.
>>>
>> Questa l'avevo capita. Intendevo il progetto "neurone perceptron"
>>
>> il file che genera l'errore sarebbe utile.
>> _______________________________________________
>> Python mailing list
>> Python a lists.python.it
>> https://lists.python.it/mailman/listinfo/python
>>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20191022/c88ab1f7/attachment-0001.html>


Maggiori informazioni sulla lista Python