Ich habe darüber nachgedacht, wie man es so gestalten kann, dass während des Trainings neue Neuronen an den richtigen Stellen geboren werden, aber nach dem Studium der Algorithmen kam ich zu dem Schluss, dass sie keine gemeinsame Formalisierung haben, es gibt praktisch keine Schnittpunkte. Deshalb habe ich mich geweigert und mich auf den Aufbau eines vertikalen Netzes konzentriert. Art:
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);
};
TheXpert: Oh, Sie sind online. Antwort zur Topologie.
Meines Erachtens kann und sollte das Topologiemanagement als genetische Programmierung betrachtet werden. Hier bin ich nicht sehr stark - das ist ein eigenes großes Wissensgebiet. Aber wenn es nötig ist, werde ich mich mit dieser Frage näher befassen. Es ist ein GA, bei dem sich die Chromosomenlänge dynamisch ändern kann. In meiner GA hat das Chromosom eine feste Länge. Es ist jedoch möglich, dies zu umgehen, indem man zusätzliche Flaggen einführt, um einzelne Gene einzufrieren und die Länge des Chromosoms mit einer Reserve zu belegen.
Urain: Dies ist der nächste Schritt und steht nicht in direktem Zusammenhang mit dem Motor, seine Implementierung erfolgt durch einen externen GA, der verschiedene Topologien erstellt, die Objekte verschiedener Motoren initialisieren.
Und ja, Sie sollten wahrscheinlich mehr als einen GA verwenden. Eine für die Topologie und eine für die Anpassung aller Gewichte aller Netze. Dann würde der zweite GA nur einige der Gene einfrieren, je nach der aktuellen Topologie.
Ich schlage vor, als erstes entweder Echo oder SOM auf dem Weg zu implementieren, und die Schnittstellen können fertiggestellt werden.
Komm schon, was ist näher an dir dran?
Die einfachste wäre MLP.
Komm schon, was ist näher an dir dran?
Engeres Echo, helleres SOM. Wahrscheinlich besser als SOM, denn es kann mit oder ohne Lehrer durchgeführt werden.
SOM ist so.
1. Mascheninitialisierung
2. Arbeitshub der Masche
3. Lehrmasche
Wer macht was?
Oder sollten wir vielleicht zuerst die Klassenhierarchie anpassen?
Ich habe darüber nachgedacht, wie man es so gestalten kann, dass während des Trainings neue Neuronen an den richtigen Stellen geboren werden, aber nach dem Studium der Algorithmen kam ich zu dem Schluss, dass sie keine gemeinsame Formalisierung haben, es gibt praktisch keine Schnittpunkte. Deshalb habe ich mich geweigert und mich auf den Aufbau eines vertikalen Netzes konzentriert. Art:
Daten --> Neuron --> gekapseltes neuronales Netz --> Container neuronales Netz
Es ist möglich, GAs amorph zu machen. Das menschliche Genom bestand nicht immer aus 28000 Genen.
Autsch...
Erste Schätzungen
Oh, Sie sind online. Antwort zur Topologie.
Erste Schätzungen
Das ist das "Ups", das es ist.
Dies ist der nächste Schritt und steht nicht in direktem Zusammenhang mit dem Motor, seine Implementierung erfolgt durch einen externen GA, der verschiedene Topologien erstellt, die Objekte verschiedener Motoren initialisieren.
Und ja, Sie sollten wahrscheinlich mehr als einen GA verwenden. Eine für die Topologie und eine für die Anpassung aller Gewichte aller Netze. Dann würde der zweite GA nur einige der Gene einfrieren, je nach der aktuellen Topologie.