Incité par propagande affichée autour de l'ESI, Professeur Manso a été fasciné avec la possibilité de la vie extra-terrestre. En outre, une nuit quand il revenait de Nasso, il a observé un groupe de lumières dans le ciel cela ressemble un peu comme une lettre 'A'. Professeur Manso recomptages que ce groupe de lumières a regardé quelque chose comme:
Malheureusement, Professeur Manso est trop occupé avec la preperation des cours pour passer la nuit à regarder les étoiles. Utiliser son esprit technique, il a préparé un appareil-video pour enregistrer la région d'espace où il a vu les lumières qui ont ressemblé comme une lettre.
Hélas, l'appareil-photo de la vidéo présente un dilemna intéressant: bien qu'il enregistre le nuit ciel efficacement, il prend de même que long regarder la vidéo comme il fait pour passer la nuit qui regarde pour les signaux d'espace. Une vidéo d'une nuit peut contenir millions de cadres, et il prend trop long à inspecter chaque cadre manuellement pour voir s'il y a un modèle de lumières qui ressemblent à une lettre.
Professeur Manso a besoin de l'aide de ses étudiants talentueux. Utiliser votre connaissance des réseaux neuronaux mulit-couche, c'est possible de créer un réseau qui parcourt à travers tous les cadres d'une vidéo et cherche une lettre spécifique. En travaillant ensemble, vous devriez être capables de créer et former un réseau neuronaux pour chaque lettre, et alors le réseau peut traverser la vidéo en cherchant la lettre pour laquelle le réseau a été formé. Si des lettres sont trouvées, peut-être - et c'est le grand espoir de Professeur Manso - les lettres de chaque groupe peuvent être combinés pour nous fournir quelque sagesse de l'espace externe.
La classe sera divisée en groupes de 2, chaque groupe sera assigné essayer 2 lettres pour chercher dans la séries des cadres dans la video de Prof. Manso. (Voyez au-dessous pour les Groupes et lettres assignées)
Chaque groupe aura besoin d'installer un Environnement de Java sur l'ordinateur ils travailleront. Vous avez besoin de "Map a network drive" à:
\\KONSA\public
(Pour cet exemple nous allons imaginer que nous avons dressé le chemin "\\KONSA\public" à "d:\")
Ajoutez les lignes suivant à la fichier c:\autoexec.bat:
set PATH=%PATH%;d:\Java\jdk\bin
set CLASSPATH=%CLASSPATH%;d:\reseauxNeuronaux\code
("set PATH..." vous autorise à utiliser les programmes java.exe et javac.exe, "set CLASSPATH..." est exigé pour Java pour lire les bibliothèques préparé pour ce projet)
Créez un répertoire où vous travaillerez sur votre projet. Copiez la fichier "video.dat" du chemin:
\\KONSA\public\reseauxNeuronaux\code\esi\lettresdespace\video.dat
dans votre répertoire. Cette fichier contient la video que Professeur Manso a enregistré.
Suivant, nous allons écrire (avec un éditeur de votre choix), compile (javac TestApp.java) et exécute (java TestApp) le programme suivant:
// TestApp.java
import esi.lettresdespace.*; public class TestApp { public static void main(String args[]) { // Charge la video Video video = Video.charge("video.dat"); // Cree un lecteur pour afficher la video VideoLecteur lecteur = new VideoLecteurGraphique(); int numCadres = video.getSize(); // Passe tous les cadres dans le video // (ca va prend trop de temps, type Ctrl-C a sortir) for (int i=0; i < numCadres; i++) { System.out.println("Affiche le cadre a index: " + i + " / " + numCadres); Cadre next = video.getCadreAt(i); // Affiche le cadre et attend reponse de l'utilisateur boolean reponse = lecteur.confirmCadre(next); if (reponse == true) { System.out.println("Je vais accepter ce cadre comme " + "la lettre lequel nous cherchons"); } } System.exit(0); } }
Clairement, il ne vaut pas l'effort d'envisager chaque cadre manuellement pour chercher un message d'espace. Nous aimerions créer un réseau neuronaux qui peut traverser tous les cadres dans la video pour chercher une lettre spécifiée.
Vous aurez besoin de faire des enchantillons de vos lettres pour le former le réseau. Dans le dossier:
\\KONSA\public\reseauxNeuronaux\code\esi\lettresdespace\fichiers
Vous allez trouver trois fichiers: une est la grande liste avec un énchantillon pour chaque lettre ("toutesLettres.dat"), et les autres deux sont pour former un reseau qui peux reconnaitre la lettre A: "lettreA.dat" contient les énchantillons positifs, et "toutesLettresSansA.dat" contient les autres lettres que nous utilisons comme les énchantillons negatifs quand nous formons le reseau.
Il faut que vous faisez quatre fichiers dans votre répertoire: deux avec 5-10 énchantillons pour chaque lettre lequel vous cherchez, et les autres deux avec une énchantillons negatif pour tous les autres lettre que vous ne cherchez pas. Par example, si vous cherchez les lettres B et Z, vous créerez une fichier qui s'appelle "lettreB.dat" avec 5-10 énchantillons de la lettre B, et une autre fichier qui s'appelle "lettreZ.dat" avec 5-10 énchantillons de la lettre Z. Maintenant, pour la lettre B, il faut creer une fichier avec un exemple pour toutes les autres exceptent B - copie "toutesLettres.dat" à "toutesLettresSansB.dat" et enleve l'énchantillon de la lettre B. Faisez la même chose pour la lettre Z pour créer "toutesLettresSansZ.dat".
Remarquez:
Il y a quelques lettres qui sont semblable dans apparence. Par exemple, la lettre I est semblable à lettre J. Si vous cherchez la lettre I, ce sera utile à ajouter quelque exemple négatif supplémentaire pour J quand vous formez le reseau. C'est facile de faire - seulement ajoutez un ou deux plus d'échantillons de la lettre J à la fichier "toutesLettresSansI.dat".
Des autres lettres qui sont semblable:
P,R
O,Q
I,J,T,!
E,F
U,V
(C'est possible que vous puissiez penser à quelques-uns autres).
À ce point, nous avons créé tous les fichiers que nous aurons besoin d'écrire notre programme.
Initiation aux Réseaux Neuronaux index (HTML pour toutes les classes est ici): index.html
Java classes utilisé pour le projet:
Remarquez: pour utiliser une classe d'une de ces packages dans votre programme, il faut "import" le package. Par exemple, pour utiliser la classe Cadre, ecrivez (au debut de votre programme):
import esi.lettresdespace.Cadre;
pour utiliser toutes les classes dans un package, ecrivez:
import esi.lettresdespace.*;
La documentation pour toutes ces classes est à:
reseauxNeuronaux\api\overview-summary.html
La documentation pour les autres bibiothèques JAVA est à:
\\KANSO\public\Java\jdk\docs\api\index.html
Ensemble, la classe a besoin de réunir les lettres (si en) voir s'il y a un message d'espace
(Chaque groupe a besoin de contribuer la séquence à qu'ils ont trouvé leurs lettres)
Email/Print le programme que vous avez ecrit pour chercher vos lettres.
26-3+4 = 27 lettres (Toutes lettres majiscules sans A, J, et Y, + '_' + ''' + ',' + '!')
E310 - _,B
E311 - C,D
E312 - E,F
E313 - G,H
E314 - I,!
E315 - K,L
E316 - M,N
E317 - O,P
E318 - Q,R
E320 - S,T
E321 - U,V
E322 - W,X
E323 - _,Z
E324 - U,'
E325 - V,_
E326 - T,!
E327 - M,'
E328 - I,Z
Remarquez: la lettre A est ma contribution - il a lieu dix fois dans la video. Les index sont:
A= {1635, 3433, 7824, 8212, 8777, 12933, 15561, 16709, 17840, 19505}
Après que chaque groupe ait trouvé les index pour chacun de leurs lettres, c'est nécessaire d'arranger les lettres pour former le message. C'est possible de faire ceci à la main, cependant c'est beaucoup plus intéressant (et plus vite!) pour arranger les lettres avec un programme simple. Ici est l'idée de base pour le programme:
Créez un class pour entreposer le char de la lettre et l'index. Par example:
class LettreDeLaMessage {
char lettre;
int index;
}
Si tous les groupes ont fait leur travail, vous devriez avoir une liste des index pour chaque lettre. (eg. A=
Pour chaque lettre, créez une liste des LettreDeLaMessage - un object pour chaque index.
Mettez toutes les object (LettreDeLaMessages) ensemble dans un Vector, et les sortez utiliser la valeur de l'index.
Finalement, traversez le vecteur assorti et imprimez l'ombre pour chaque objet LettreDeLaMessage