Offline
Newbie
Karma: 0
Posts: 16
|
 |
« on: July 12, 2012, 02:25:49 pm » |
Salve a tutti, eccomi qua con il mio primo post. Vi scrivo per chiedervi aiuto, o almeno avere delle indicazioni, su come realizzare una libreria per gestire le Reti Neurali. Anche se non conoscete l'argomento potete aiutarmi lo stesso, dato che non entrerò nel dettaglio. Ho trovato qualcosa in proposito in giro per la rete, in particolar modo una classe scritta in Processing ( questa la fonte), che se non vado errato è da dove deriva il Wiring, il linguaggio usato da Arduino. Ovviamente (  ) un semplice copia/incolla del codice non è bastato, in quanto ci sono alcune diversità tra i due linguaggi. Quello da cui vorrei partire, ovvero il primo errore ricevuto, è questo Connection[] connections={}; che mi restituisce il seguente errore error: expected unqualified-id before '[' token Connection è il nome di una classe con annesso costruttore. Il problema, mi pare di aver capto, è che il Wiring ha bisogno della dimensione dell'array tra parentesi [], ma volendo crearlo in modo dinamico vorrei sapere come fare. Grazie mille per le eventuali, spero numerose, risposte, se avete bisogno di altri chiarimenti non esitate a farmi domande 
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #1 on: July 12, 2012, 05:53:35 pm » |
In C lo farei con puntatori e liste, l'array dinamico intendo. N.
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #2 on: July 13, 2012, 12:29:40 am » |
In C lo farei con puntatori e liste, l'array dinamico intendo. N.
Mi sconsigli quindi di usare le classi ed avere un approcio più da C che non C++?
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
God Member
Karma: 2
Posts: 652
|
 |
« Reply #3 on: July 13, 2012, 03:52:31 am » |
Potresti spiegarmi meglio cosa fa quella classe in processing? No perchè sarebbe il mio sogno ricevere input dal mio sistema nervoso, anche se sono abbastanza scettico 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17003
Don't know what I do
|
 |
« Reply #4 on: July 13, 2012, 03:54:42 am » |
Ma una rete neurale non è un sistema per interlacciare un dispositivo al cervello ma un algoritmo in grado di cambiare il suo stato interno durante l'esecuzione in base alle informazioni che riceve dal mondo esterno (autoapprendimento) 
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
God Member
Karma: 2
Posts: 652
|
 |
« Reply #5 on: July 13, 2012, 04:18:44 am » |
Che figura 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17003
Don't know what I do
|
 |
« Reply #6 on: July 13, 2012, 04:27:42 am » |
Che figura  Lascia fare, capita. Pensa a tutte quelle che faccio io.... 
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #7 on: July 13, 2012, 07:04:23 am » |
In C lo farei con puntatori e liste, l'array dinamico intendo. N.
Mi sconsigli quindi di usare le classi ed avere un approcio più da C che non C++? Guarda per quanto ne so io, ma gli utenti più esperti ne sapranno di più, non tutto il C++ è supportato. In C io creerei una struct con i campi che ti servono e un campo puntatore alla prossima connessione. Considera che è solo uno spunto per una discussione/studio...non faccio cose complesse in C da non so quanto tempo. Utenti navigati che ne dite? N.
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #8 on: July 16, 2012, 10:09:47 am » |
Che il C++ non è completamente supportato me ne sono accorto pian piano  , altrimenti sarebbe stato uno spasso usare le libreria create per il C++, e se ne trovano molte in giro. TI ringrazio per il consiglio della struct, ed ovviamente è ciò che avevo pensato fin da subito. La mia domanda è se è un tipo di dato efficiente (sia come peso che come velocità) o si può fare di meglio?
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #9 on: July 16, 2012, 02:00:37 pm » |
TI ringrazio per il consiglio della struct, ed ovviamente è ciò che avevo pensato fin da subito. La mia domanda è se è un tipo di dato efficiente (sia come peso che come velocità) o si può fare di meglio Come peso , credo che intendi occupazione di memoria, dipende dal tipo di dato che metti dentro. Come velocitá, che intendi? Velocitá di accesso ai dati? Non credo che in C puoi trovare di meglio dei puntatori, almeno per tipi dinaminici. Sinceramente, non conosco alti metodi per "fare di meglio", ma magari qualche guru si. N.
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
0
Offline
Tesla Member
Karma: 87
Posts: 8498
:(){:|:&};:
|
 |
« Reply #10 on: July 16, 2012, 06:05:01 pm » |
easy, la struttura è il metodo migliore per tipi di dato "complessi". non c'è un grosso overhead del codice a parte un pò di magia coi puntatori nascosta, se è questo che intendi, ma non dovrebbe essere molto diversa da quella degli array salvo che al posto dell'indice c'è la variabile da accedere (l'array è la struttura), e la matematica per la cella di memoria non è una moltiplicazione dell'indice per l'elemento ma un valore fisso in base al tipo di dato scelto. O almeno, a caldo io farei così, poi l'implementazione vera chissà qual è. come velocità di accesso ai dati i puntatori non sono il meglio: devi leggere l'area di memoria del puntatore, usare il valore per leggere quell'area di memoria, ed infine leggi il dato. con una variabile hai direttamente l'area di memoria da leggere (salti un salto  ). per quanto riguarda la velocità di esecuzione, la cosa ideale è usare tipi di dato della stessa grandezza dell'architettura (8bit caso arduino, di meno sprechi CPU, di più ti serve più tempo CPU), ed idealmente avere un processo o thread per ogni core (1 nel nostro caso, quindi eliminare gli interrupt grazie..)
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #11 on: July 19, 2012, 06:01:56 am » |
Allora ragazzi, ho pensato che forse sarebbe meglio iniziare a scrivere codice per intenderci meglio e avere qualcosa di concreto  Ammettiamo che la libreria si chiami NeuralNet, di seguito questo dovrebbe essere il file NeuralNet.h per avere la struttura di base di una rete #ifndef NeuralNet_h #define NeuralNet_h
struct Neuron { float input, output; float error, delta; };
class NeuralNet { public: InputLayer(int neuron_number); void setInput(float* input_vector);
Layer(Layer* il, int neuron_number, float lr = 0.3, float InitialWeightMax = 1.0); OutputLayer(Layer* il, int neuron_number, float lr = 0.3, float InitialWeightMax = 1.0); void setTarget(float* target_output_vector); void getOutput(float* output_vector); float getError(); }; #endif Che ne dte? E' un buon punto di partenza?
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 87
Posts: 8498
:(){:|:&};:
|
 |
« Reply #12 on: July 19, 2012, 01:00:44 pm » |
perchè una classe? tra l'altro credo che tu stia facendo casini con i costruttori perchè non specifichi il valore di ritorno delle funzioni
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #13 on: July 19, 2012, 03:27:58 pm » |
Hello again pk86, capisco che sei molto orientato al c++, ma in c puoi fare il tutto senza tirare in mezzo le classi. Ti posto in link con una infarinata sulle liste, magari ti torna utile http://www.myglider.altervista.org/tutorial/liste_dinamiche.phpN.
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #14 on: July 20, 2012, 05:34:15 am » |
perchè una classe? tra l'altro credo che tu stia facendo casini con i costruttori perchè non specifichi il valore di ritorno delle funzioni
si infatti credo di aver fatto un copia/incolla sbagliato del codice, non so da dove è uscito  Hello again pk86, capisco che sei molto orientato al c++, ma in c puoi fare il tutto senza tirare in mezzo le classi. Ti posto in link con una infarinata sulle liste
Il fatto è che vedo tutte le librerie sviluppate con le classi, e volendo creare qualcosa "per tutti" mi verrebbe più spontaneo. Tra l'altro non saprei se arduino accetta le librerie fatte tramite funzione, dovrei provare. Grazie mille per il link e per i consigli che stanno arrivando
|
|
|
|
|
Logged
|
|
|
|
|
|