J'ai réfléchi à la manière de faire en sorte que, pendant l'entraînement, de nouveaux neurones naissent aux bons endroits, mais après avoir étudié les algorithmes, je suis arrivé à la conclusion qu'ils n'auraient pas de formalisation commune, il n'y a pratiquement aucun point d'intersection. C'est pourquoi j'ai refusé et me suis concentré sur la construction d'un réseau vertical. Type :
class IEvolvable // интерфейс для подключения эволюционных алгоритмов
{
public:
virtualvoid GetWeightsAsVector(double& weights[]) const; // получаем все изменяемые веса собранные в одном векторе для генетикиvirtualvoid ApplyWeightsVector(double weights[]); // применяем подобранные генетикой веса к сетиvirtualvoid FeedInput(double inData[]); // подаем входvirtualvoid PropagateSignal(); // прогоняем входной сигналvirtualvoid GetOutput(double& outData[]) const; // берем выход
};
class ISerializable // сохранение
{
public:
virtualbool LoadFromFile(string filePath);
virtualbool SaveToFile(string filePath) const;
};
class IBasicNet
: public IEvolvable
, public ISerializable
{
public:
virtualvoid FeedInput(double inData[]); // вход можно брать из коллекции или отдельно. Подразумевается, что коллекция включает в себя обработку входов, поэтому отдельные входы надо преобразовывать коллекциейvirtualvoid FeedInput(int index);
virtualvoid PropagateSignal();
virtualvoid GetOutput(double& outData[]) const;
virtualvoid Init(); // инициализация. Инициализатор можно подавать в конструкторе, можно в функцию, посмотрим как будет удобно
}
class ISupervised // сеть с учителем
: public IBasicNet
{
public:
virtualvoid SetPatternCollection(PatternCollection* collection); // у сетей с учителем обязательно каждому входному образу соответствует выходной поэтому лучше их сразу организовывать по парам
virtualvoid CountError(); // подсчет ошибки. сюда например будет входить ОРО для MLPvirtualvoid Learn(); // изменение весов. никаких итераций внутри, чтобы можно было на каждом шаге просмотреть состояние
};
class IUnsupervised // сеть без учителя
: public IBasicNet
{
public:
virtualvoid SetInputCollection(InputCollection* collection); // у сетей без учителя только входыvirtualvoid Learn();
};
class IInitializer // инициализатор
{
public:
virtualvoid Init(double& value);
virtualvoid Init(double& value[]);
virtualvoid Init(Matrix& value);
};
LeXpert: Oh, vous êtes en ligne. Réponse sur la topologie.
C'est un "oops". En ce qui me concerne, la gestion de la topologie peut et doit être considérée comme de la programmation génétique. Ici, je ne suis pas très fort - c'est un vaste domaine de connaissances à part. Mais, le cas échéant, je reprendrai cette question de près. Il s'agit d'une AG dans laquelle la longueur des chromosomes peut changer dynamiquement. Dans mon AG, le chromosome a une longueur fixe. Il est toutefois possible de contourner ce problème en introduisant des drapeaux supplémentaires pour geler les gènes individuels et prendre la longueur du chromosome avec une réserve.
Urain: C'est l'étape suivante et elle n'est pas directement liée au moteur, sa mise en œuvre se fait par le biais d'un AG externe qui crée différentes topologies, qui initialisent les objets des différents moteurs.
Et oui, vous devriez probablement utiliser plus d'une AG. Un pour la topologie et un pour ajuster tous les poids de tous les réseaux. Ensuite, la deuxième AG gèlerait simplement certains des gènes en fonction de la topologie actuelle.
Je propose que le premier implémente soit l'écho ou le SOM en cours de route et que les interfaces puissent être finalisées.
Allez, qu'est-ce qui est le plus proche de vous ?
Le plus simple serait le MLP.
Allez, qu'est-ce qui est le plus proche de vous ?
Echo plus proche, SOM plus léger. Probablement meilleure que SOM, car elle peut être pratiquée avec ou sans professeur.
SOM est comme ça.
1. initialisation du maillage
2. course de travail du maillage
3. apprentissage du maillage
Qui fait quoi ?
Ou peut-être devrions-nous d'abord ajuster la hiérarchie des classes ?
J'ai réfléchi à la manière de faire en sorte que, pendant l'entraînement, de nouveaux neurones naissent aux bons endroits, mais après avoir étudié les algorithmes, je suis arrivé à la conclusion qu'ils n'auraient pas de formalisation commune, il n'y a pratiquement aucun point d'intersection. C'est pourquoi j'ai refusé et me suis concentré sur la construction d'un réseau vertical. Type :
Données --> neurones --> réseau neuronal encapsulé --> réseau neuronal conteneurisé
Il est possible de rendre les GA amorphes. Le génome humain n'a pas toujours été constitué de 28 000 gènes.
Aïe...
Premières estimations
Oh, vous êtes en ligne. Réponse sur la topologie.
Premières estimations
C'est le "oups" que c'est.
C'est l'étape suivante et elle n'est pas directement liée au moteur, sa mise en œuvre se fait par le biais d'un AG externe qui crée différentes topologies, qui initialisent les objets des différents moteurs.
Et oui, vous devriez probablement utiliser plus d'une AG. Un pour la topologie et un pour ajuster tous les poids de tous les réseaux. Ensuite, la deuxième AG gèlerait simplement certains des gènes en fonction de la topologie actuelle.