<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>