<div dir="auto"><div dir="ltr">Ecco il file setup.py<div><br></div><div>from distutils.core import setup<br><br><br>setup(<br>    name = 'PyNEURONE',<br>    version = '1.3.1',<br>    description = 'Leggi il file .txt nella cartella',<br>    long_description = open('FAQ_PyNeur.txt', 'r').read(),<br>    py_modules = ['Ag_Neuron'],<br>    author = 'Alberto Girardi',<br>    author_email = '<a href="mailto:alberto.gir747@gmail.com" rel="noreferrer noreferrer" target="_blank">alberto.gir747@gmail.com</a>',<br>    keywords = 'python generators distutils',<br>    scripts = '<a href="http://PyNEURONE-1.3.1.py" rel="noreferrer noreferrer" target="_blank">PyNEURONE-1.3.1.py</a>',<br>    platforms = 'all',<br>    classifiers = ['Intended Audience::Education'<br>                    ]<br><br>    )<br></div><div><br></div><div><br></div><div>Ecco anche il file che contiene la definizione delle classi. E' abbastanza grande, spero di non intasare troppo la mail:</div><div><br></div><div>import math<br><br>class Neurone:<br><br>    def __init__(self):<br>        self.pesi = [1, 1]<br>        self.learning_rate = 0.4999<br>        self.delta_learningrate = 0.0018<br>        self.errore_tot = 0<br><br>    def detPesi(self, ninputs):<br>        pesi = [1 for i in range( ninputs)]<br><br>    def activationFunction(self, pa):<br>        #soglia<br>       return 1/(1 + math.exp(-pa))<br>        #if pa> 0.0:<br>       #     return 1.0<br>       # else:<br>         #   return 0.0<br><br>    def output (self, inputs):<br>        pa = 0<br>        for i in range(len(inputs)):<br>            pa += inputs[i] * self.pesi[i]<br><br>            return self.activationFunction(pa)<br><br>    def learn(self, x, target ):<br>        out = self.output(x)<br>        errore = target - out<br><br>        for i, w in enumerate(self.pesi):<br><br>            self.pesi[i] += self.learning_rate * errore * x[i]<br><br>        print('  target : ', target, ' '*(15-len(str(target))),'   out:',out,' '*(22-len(str(out))),'  errore:',errore)<br><br>class Progetto():<br><br>    def __init__(self, neurone, nome=''):<br>        self.neuron = neurone<br>        self.nome = nome<br>        self.file_in = ''<br>        self.n_dir = ''<br>        self.x_data = []<br>        self.y_data = []<br>        self.prog_loc = ''"<br><br>    def creaProgetto(self, name, f_in):<br>        import os<br>        self.nome = name<br><br>        try:<br><br>            f_log = open('log_p.txt', 'r' )<br>            self.prog_loc = f_log.readline()<br>            f_log.close()<br><br>        except FileNotFoundError:<br><br><br>                self.prog_loc = input('\nLa cartella progetti_ML non è presente, in che path si vuole inserire la cartella (se su Windosw usare la \\ ):')<br>                f_log = open('log_p.txt', 'x' )<br>                f_log.write(self.prog_loc)<br>                f_log.close()<br>                os.mkdir('{0}\\progetti_ML\\{1}_progetto'.format(self.prog_loc, self.nome))<br><br><br><br>        self.n_dir= '{0}\\progetti_ML\\{1}_progetto'.format(self.prog_loc, self.nome)<br><br>        try:<br><br>            f_lp = open('{0}\\progetti_ML\\lista_progetti.txt'.format(self.prog_loc), 'a')<br><br><br>            f_lp.write(self.nome+'\n')<br>            f_lp.close()<br><br><br>       # except:<br>            #f_lp.close()<br>          #  print('Problema con il file')<br>        except:<br>            pass<br><br>        import time<br><br>        try:<br>            with open('{0}\\storico_progetti.txt'.format(self.prog_loc+'\\progetti_ML'), 'a') as f_s:<br>                f_s.write('Progetto {0} creato il {1} alle {2}\n'.format(self.nome, time.strftime('%d/%m/%Y'), time.strftime('%H:%M:%S')))<br><br>        except FileNotFoundError:<br>            f_s = open('{0}\\storico_progetti.txt'.format(self.prog_loc+'\\progetti_ML'), 'w')<br>            f_s.write('Progetto {0} creato il {1}\n'.format(self.nome, time.strftime('%d/%m/%Y alle %H:%M:%S')))<br>            f_s.close()<br><br><br><br>        self.file_in = self.n_dir+'\\f_inputs.csv'<br><br>        try:<br><br>            os.mkdir(self.n_dir)<br>            print('\nCartella creata')<br><br>        except :<br>            pass<br><br><br>        with  open(f_in,'r') as f_inp:<br>            with open(self.file_in, 'w') as f_inpc:<br><br>                f_inpc.write(f_inp.read())<br><br><br>        with open('{}\\storico.txt'.format(self.n_dir), 'w') as f_st:<br>            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))<br><br>        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))<br>        print('File inputs copiato nella cartella del progetto')<br>        print('Progetto aggiunto allo storico')<br><br><br><br><br><br>    def mostraProgetti(self):<br>        with open('log_p.txt', 'r' ) as f_log:<br><br>            self.prog_loc = f_log.readline()<br><br>        f = open('{}\\progetti_ML\\lista_progetti.txt'.format(self.prog_loc))<br><br>        with f:<br>            print('\n\nScegliere uno fra i seguenti progetti:\n\n',f.read())<br><br><br>    def getProgetto(self):<br>        self.nome = input('\nChe progetto si vuole caricare: ')<br><br>        with open('log_p.txt', 'r' ) as f_log:<br><br>            self.prog_loc = f_log.readline()<br><br><br>        self.n_dir = '{0}\\progetti_ML\\{1}_progetto'.format(self.prog_loc, self.nome)<br><br>        with  open('{}\\progetti_ML\\lista_progetti.txt'.format(self.prog_loc), 'r') as f_lp:<br><br>            if self.nome in f_lp.read():<br>                print('Progetto esistente e caricato correttamente\n')<br><br>                with open('{}\\storico.txt'.format(self.n_dir), 'r+') as f_st:<br>                    import time<br><br>                    print('\n', f_st.read())<br>                    f_st.write('\n\nRiapertura progetto effettuata il {0}\n'.format(time.strftime('%d/%m/%Y alle %H:%M:%S')))<br>                return 0<br><br>            else:<br>                print('Progetto non esistente. Riprovare')<br>                return 1<br><br><br><br><br>    def getInputs_et_Pesi(self, f_in):<br>        self.file_in = f_in<br>        self.getData()<br><br>        with open(self.n_dir+'\\pesi.txt', 'r') as f_p:<br>            self.neuron.pesi = [float(i)  for i in f_p.readline()[1:-1].split(', ')]<br><br><br>    def getPesi(self):<br>        self.file_in  = self.n_dir+'\\f_inputs.csv'<br>        self.getData()<br><br>        with open(self.n_dir+'\\pesi.txt', 'r') as f_p:<br>            self.neuron.pesi = [float(i)  for i in f_p.readline()[1:-1].split(', ')]<br><br><br><br><br><br>    def getData(self):<br>        print('Caricamento file in corso...\n')<br><br>        self.data_x = []<br>        self.data_y = []<br><br>        with open(self.file_in, newline='', mode = 'r') as f_in:<br><br>            import csv<br>            lettore = csv.reader(f_in, delimiter = ';')<br><br>            for l in lettore:<br>                self.data_x.append([float(i) for i in l[:-1]])<br>                self.data_y.append(float(l[-1]))<br>                print(l)<br><br><br>        print('Caricamento dati completato\n')<br><br>        print('\n\n\n','data_x',self.data_x,'data_y', self.data_y)<br><br><br><br><br><br>    def AllenaNeurone(self, n_epoch):<br>        import time<br><br><br>        print('\n\n\t\t\t\t\t\t\tINIZIO ALLENAMENTO NEURONE\n\n\n\n')<br>        print('x train = ',self.data_x)<br>        print('y train = ',self.data_y)<br>        print("\n\nL'allenamento iniziera tra 5 secondi\n")<br><br>        import time<br><br>        with open('{0}\\storico.txt'.format(self.n_dir), 'a') as f_st:<br>            f_st.write('Allenamento progetto per {0} epoche iniziato il {1}'.format( str(n_epoch), time.strftime('%d/%m/%Y alle %H:%M:%S')  ))<br><br><br><br>        for i in range(5):<br>            print(5-i)<br>            time.sleep(0.2)<br><br>        print('\nVia!!!')<br><br>        time.sleep(0.2)<br><br>        t = time.time()<br><br>        for epoch in range(n_epoch+1):<br><br>            print('\n')<br>            print('epoch', epoch)<br><br>            for i, x in enumerate( self.data_x):<br><br>                target = self.data_y[ i ]<br>                self.neuron.learn(x, target)<br><br>        te=time.time()-t<br><br>        t_e = te/n_epoch<br>        e_t = n_epoch/te<br><br>        print('\n\n\n')<br>        print('Allenamento durato :', te)<br>        print('Secondi per epoch  :', round(t_e, 10))<br>        print('Epoch al secondo   :', round(e_t, 10))<br><br>        with open('{}\\storico.txt'.format(self.n_dir), 'a') as f_st:<br>            f_st.write('.\nAllenamento durato {0} s, secondi/epoch {1}, epoch per secondo {2}\n\n'.format(te, t_e, e_t))<br><br><br><br><br>    def Predici(self):<br>        print('\n\n\nPredizione del neurone sugli input dati:\n')<br><br>        for i in self.data_x:<br>            out = self.neuron.output(i)<br><br>            print('\tinput: ', i, '  out:', out)<br><br><br><br>    def conservaPesi(self):<br>       <br><br>        f_p = open(self.n_dir+'\\pesi.txt','w')<br><br>        with f_p:<br>            f_p.write(str(self.neuron.pesi))<br><br>        print('\n\n\nPesi salvati correttamente in {0}\\pesi.txt '.format(self.n_dir))<br></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">Spero l'identazione sia rimasta</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno lun 21 ott 2019 alle ore 18:08 Alberto Girardi <<a href="mailto:alberto.gir747@gmail.com" rel="noreferrer noreferrer" target="_blank">alberto.gir747@gmail.com</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Ah, scusate io uso questi termini, ma forse non sono corretti.<div dir="auto">È il classico programma di machine learning basato sul 'neurone'.</div><div dir="auto">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.</div><div dir="auto">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)</div><div dir="auto">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.</div><div dir="auto"><br></div><div dir="auto"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il lun 21 ott 2019, 17:44 Ivo Reano <<a href="mailto:reanoivo@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">reanoivo@gmail.com</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">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. <br></div></blockquote><div><span class="gmail_default" style="font-family:verdana,sans-serif">Questa l'avevo capita. Intendevo il progetto </span><span class="gmail_default" style="font-family:verdana,sans-serif">"neurone perceptron"</span></div><div><span class="gmail_default" style="font-family:verdana,sans-serif"><br></span></div>i<span class="gmail_default" style="font-family:verdana,sans-serif">l file che genera l'errore sarebbe utile.</span></div></div>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" rel="noreferrer noreferrer noreferrer noreferrer" target="_blank">Python@lists.python.it</a><br>
<a href="https://lists.python.it/mailman/listinfo/python" rel="noreferrer noreferrer noreferrer noreferrer noreferrer" target="_blank">https://lists.python.it/mailman/listinfo/python</a><br>
</blockquote></div>
</blockquote></div>