I was thinking about how to screw it in so that during training new neurons would be born in the right places, but after studying the algorithms I came to the conclusion that they will not have a common formalization, almost no points of intersection. That is why I refused, concentrating on the vertical construction of the network. 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);
};
TheXpert: Oh, you're online. Answer about topology.
That's an "oops". As I see it, topology management can and should be viewed as genetic programming. I'm not very strong here - it's a separate broad field of knowledge. But, if necessary, I will take up this question closely. This is the kind of GA in which the chromosome length can change dynamically. In my GA, the chromosome length is fixed. Although, it is possible to get around this by introducing additional flags to freeze individual genes, and you can take the chromosome length with a reserve.
Urain: This is the next step and is not directly related to the engine, its implementation is through an external GA that creates different topologies, those initialize objects of different engines.
And yes, you should probably use several GAs. One for topology and one for adjusting all weights of all networks. Then the second GA would just freeze some of the genes depending on the current topology.
Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
Come on, what's closer to you?
Closer Echo, Easier SOM. SOM is probably better, since it can be done with or without a teacher.
SOM is like that.
1. initialize the grid
2. work the grid
3. teach the grid
Who does what?
Or should we first work out the class hierarchy?
I was thinking about how to screw it in so that during training new neurons would be born in the right places, but after studying the algorithms I came to the conclusion that they will not have a common formalization, almost no points of intersection. That is why I refused, concentrating on the vertical construction of the network. Type:
data --> neuron --> encapsulated neural network --> container neural network
You can make GAs amorphous. The human genome didn't always consist of 28,000 genes.
Ouch...
First estimates
Oh, you're online. Answer about topology.
First estimates
This is an "oops".
This is the next step and is not directly related to the engine, its implementation is through an external GA that creates different topologies, those initialize objects of different engines.
And yes, you should probably use several GAs. One for topology and one for adjusting all weights of all networks. Then the second GA would just freeze some of the genes depending on the current topology.
Throw in some comments.