Title: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: vasilis94 on December 08, 2014, 19:12:43 pm Εργασία G Ένα απλό νευρωνικό δίκτυο αποτελείται από έναν αριθμό νευρώνων οι οποίοι συνδέονται μεταξύ τους μέσω συνάψεων κάθε μια από τις οποίες έχει ένα ορισμένο βάρος. Για κάθε νευρώνα ορίζεται μία κατάσταση η οποία μπορεί να έχει τιμή 1 ή -1. Για να υπολογισθεί η τιμή που θα έχει η κατάσταση του νευρώνα αθροίζονται τα γινόμενα των τιμών της κατάστασης των νευρώνων που συνδέονται με αυτόν επί το βάρος των αντίστοιχων συνάψεων και αν το άθροισμα αυτό είναι μεγαλύτερο από ένα κατώφλι Θ, που ορίζεται για τον νευρώνα, η τιμή της κατάστασής του ορίζεται ως 1, διαφορετικά η κατάσταση ορίζεται ως -1. Το δίκτυο λειτουργεί θέτοντας μια αρχική τιμή για την κατάσταση του κάθε νευρώνα και επαναπροσδιορίζοντας την κατάσταση των νευρώνων με την πιο πάνω διαδικασία. Ο επαναπροσδιορισμός επαναλαμβάνεται έως ότου να μην προκύπτει αλλαγή της κατάστασης για κανέναν από τους νευρώνες του δικτύου. Στην περίπτωση αυτή λέμε ότι το δίκτυο βρίσκεται σε σταθερή κατάσταση (stable state). Να γραφεί το λογισμικό στο οποίο να ορίζεται η κλάση neuron η οποία υλοποιεί ένα νευρώνα. Για τα αντικείμενα στον τύπο της κλάσης να οριστεί ένας extractor, επικαλύπτοντας τον τελεστή >, με την κλήση του οποίου να διαβάζονται οι ταυτότητες των νευρώνων που συνδέονται με τον νευρώνα που υλοποιεί το αντικείμενο και τα βάρη των αντίστοιχων συνάψεων. Ο extractor να διαβάζει ακόμη το κατώφλι ενεργοποίησης του και μια αρχική τιμή για την κατάστασή του. Ως μέλος της κλάσης neuron να οριστεί ακόμη μια επικάλυψη του τελεστή new η οποία να δεσμεύει την αναγκαία μνήμη για την καταχώρηση ενός πίνακα από αντικείμενα στον τύπο της κλάσης. Για κάθε αντικείμενο του πίνακα η επικάλυψη να ορίζει, ως ταυτότητα, τη θέση του στον πίνακα και να διαβάζει τον αριθμό των νευρώνων που συνδέονται με τον νευρώνα που υλοποιεί το αντικείμενο. Η επικάλυψη να δεσμεύει την απαραίτητη μνήμη για την καταχώρηση των ταυτοτήτων των νευρώνων που συνδέονται με τον νευρώνα που υλοποιεί το αντικείμενο καθώς και για την καταχώρηση των βαρών των αντίστοιχων συνάψεων. Τέλος η επικάλυψη να χρησιμοποιεί τον extractor για να εισάγει τα αντίστοιχα στοιχεία για κάθε ένα από τα αντικείμενα του πίνακα. Στο λογισμικό να οριστεί ακόμη η κλάση network η οποία υλοποιεί ένα νευρωνικό δίκτυο. Ως μέλος της κλάσης να οριστεί μια επικάλυψη του τελεστή new η οποία να δεσμεύει την απαραίτητη μνήμη για την καταχώρηση ενός αντικειμένου στον τύπο της κλάσης. Η επικάλυψη να διαβάζει τον αριθμό των νευρώνων που αποτελούν το δίκτυο και να δεσμεύει, χρησιμοποιώντας την επικάλυψη του τελεστή new που ορίστηκε για τα αντικείμενα τύπου neuron, την απαραίτητη μνήμη για την καταχώρηση των στοιχείων των νευρώνων του δικτύου. Για την κλάση να οριστεί ακόμη ένας insertor, επικαλύπτοντας τον τελεστή <, με την εκτέλεση του οποίου να εκτυπώνεται η κατάσταση του δικτύου (stable ή unstable) και η κατάσταση των νευρώνων που το αποτελούν. Τέλος στην ίδια κλάση να οριστεί και η συνάρτηση calk_state() η οποία να υλοποιεί τη λειτουργία του δικτύου. Η συνάρτηση να επαναπροσδιορίζει την κατάσταση των νευρώνων του δικτύου έως ότου επιτευχθεί ένα stable state. Επειδή υπάρχει περίπτωση το δίκτυο να μη συγκλίνει σε stable state η συνάρτηση να διαβάζεί έναν μέγιστο αριθμό επαναλήψεων για τον οποίο θα επαναπροσδιορισθούν οι καταστάσεις των νευρώνων του δικτύου. Αν εξαντληθεί ο αριθμός αυτός των επαναπροσδιορισμών και δεν έχει επιτευχθεί ένα stable state η κατάσταση του δικτύου να χαρακτηρίζεται ως unstable. Η συνάρτηση main του προγράμματος να δεσμεύει δυναμικά μνήμη για ένα αντικείμενο τύπου network και αφού καλέσει τη συνάρτηση calk_state() για το αντικείμενο αυτό να χρησιμοποιεί τον insertor που ορίστηκε στην κλάση network για να εκτυπώσει την κατάσταση του δικτύου. Το λογισμικό να περιέχει τις κατάλληλες επικαλύψεις του τελεστή delete για την αποδέσμευση της μνήμης που έχει δεσμευτεί δυναμικά. Βοηθητικές παρατηρήσεις: Υπάρχουν διαφοροποιήσεις μεταξύ των μεταγλωττιστών όταν η επικάλυψη του τελεστή new καλείται να δεσμεύσει μνήμη για πίνακες. Στην περίπτωση αυτή ορισμένοι μεταγλωττιστές απαιτούν το πρότυπο της συνάρτησης επικάλυψης να είναι void *operator new[ ](size_t size) ενώ για επικαλύψεις οι οποίες θα δεσμεύουν μνήμη για ένα μόνο στοιχείο το πρότυπο είναι void *operator new(size_t size) Στην περίπτωση που δεν οριστεί συνάρτηση επικάλυψης με βάση το πρώτο πρότυπο και χρησιμοποιηθεί ο τελεστής new για δέσμευση πίνακα εκτελείται η έκδοση που ορίζεται από τον μεταγλωττιστή. Άλλοι μεταγλωττιστές και στις δύο περιπτώσεις, δέχονται το δεύτερο πρότυπο. Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: K on December 11, 2014, 12:43:49 pm Γιατί αν δεν απατώμαι τις Πέμπτες ανεβάζει καινούρια εργασία και μέχρι τώρα δεν έχει ανεβάσει κάποια. Ανέβασε και Η. Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: Vlassis on December 11, 2014, 16:15:59 pm Λογικα θα υπαρξει και εργασια με αρχεια, δεν νομιζω να τα αφησει ετσι. Ισως μετα τις γιορτες ομως, αφου και ο Συμεωνιδης την αλλη βδομαδα δεν θα κανει μαθημα, αρα και αρχεια..
Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: Πάτρικ Αστέρης on December 11, 2014, 16:46:35 pm Υπαρχει αλλη μια ηδη ανεβασμενη στο ιτημμυ
Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: Fedra on December 11, 2014, 22:49:41 pm Ρε παιδιά.. σας φαίνεται κι εσάς λίγο ακατανόητη η εκφώνηση?
πώς θα ξέρουμε ποιοι νευρώνες συνδέονται με ποιους? ο χρήστης θα το ορίζει? αν έχει βγάλει κάποιος κάποια άκρη με την εκφώνηση.... :-\ :o Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: iokasti on December 11, 2014, 22:54:01 pm Ρε παιδιά.. σας φαίνεται κι εσάς λίγο ακατανόητη η εκφώνηση? πώς θα ξέρουμε ποιοι νευρώνες συνδέονται με ποιους? ο χρήστης θα το ορίζει? αν έχει βγάλει κάποιος κάποια άκρη με την εκφώνηση.... :-\ :o +1. Τι είναι αυτό??? :o :???: Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: lady_of_winter on December 12, 2014, 00:02:21 am Ρε παιδιά.. σας φαίνεται κι εσάς λίγο ακατανόητη η εκφώνηση? πώς θα ξέρουμε ποιοι νευρώνες συνδέονται με ποιους? ο χρήστης θα το ορίζει? αν έχει βγάλει κάποιος κάποια άκρη με την εκφώνηση.... :-\ :o Ουσιαστικά, ο χρήστης δίνει τις τιμές.Όταν πας να κάνεις την συνάρτηση για την επικάλυψη της new στην κλάση neuron, ορίζεις ένα ποιντερ τύπου neuron, ώστε να δεσμεύσεις μνήμη για έναν αριθμό αντικειμένων τύπου neuron.Και στη συνέχεια μέσα από μια επανάληψη ζητάς τις τιμές από τον χρηστή. Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: kaspas on December 14, 2014, 14:29:00 pm η κλάση neuron τι έχει ως ορίσματα, βασικά τι είναι και πως υλοποιείται ο νευρώνας ;
Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: K on December 14, 2014, 15:39:49 pm η κλάση neuron τι έχει ως ορίσματα, βασικά τι είναι και πως υλοποιείται ο νευρώνας ; Ορίσματα η neuron?? :o Μήπως εννοείς στοιχεία? Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: kaspas on December 14, 2014, 15:59:36 pm εεε ναι αυτό εννοώ τα private στοιχεία της
Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: K on December 14, 2014, 16:05:14 pm εγώ έχω αυτά
int id,*id_near,n,state; float th,*cons; τh=Θ δηλαδή το κατώφλι. Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: kaspas on December 14, 2014, 16:09:15 pm ...μάλιστα, ευχαριστώ
Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: airguitar on December 14, 2014, 22:03:15 pm τι ακριβως ειναι η ταυτοτητα του νευρωνα ?
και πως θα διαβάζονται οι ταυτότητες των νευρώνων που συνδέονται με τον νευρώνα που υλοποιεί το αντικείμενο ?? Title: Re: [C++] Άσκηση G - 2014/2015 - Προθεσμία 14/12/2014 Post by: Vlassis on December 15, 2014, 00:15:58 am τι ακριβως ειναι η ταυτοτητα του νευρωνα ? Χωρις να ειμαι καθολου σιγουρος, νομιζω οτι ολοι οι νευρωνες αποθηκευονται σε εναν πινακα, π.χ. neuron *p. Αρα η ταυτοτητα του καθε νευρωνα ειναι η θεση του στον πινακα p. Αρα το id ειναι το p.και πως θα διαβάζονται οι ταυτότητες των νευρώνων που συνδέονται με τον νευρώνα που υλοποιεί το αντικείμενο ?? Για το 2ο που ρωτας, στον extractor (>) μεσα σε μια λουπα για ολα τα αντικειμενα που συνδεονται με το νευρωνα, εβαλα αυτο: c>>neur.near_id; οπου neur αντικειμενο τυπου neuron & , και το *near_id ειναι δηλωμενο στην κλαση neuron. ^crap^ |