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);
};
我提议先沿途实现echo或SOM,接口可以最终确定。
来吧,什么离你更近?
最简单的应该是MLP。
来吧,什么离你更近?
更紧密的回声,更轻的SOM。可能比SOM更好,因为它可以在有或没有老师的情况下进行。
SOM是这样的。
1. 网格初始化
2. 网格的工作行程
3.教导网格
谁做什么?
或者,我们应该首先调整类的层次结构?
我在考虑如何使它在训练过程中,新的神经元会在正确的地方诞生,但在研究了算法后,我得出的结论是,它们不会有一个共同的形式化,实际上没有交叉点。这就是为什么我拒绝并专注于建立一个垂直网络。类型。
数据--> 神经元--> 封装的神经网络--> 容器神经网络
使GA成为无定形是可能的。人类基因组并不总是由28000个基因组成。
哎哟...
第一次估计
哦,你在网上。关于拓扑结构的答案。
第一次估计
这就是 "哎呀 "它。
这是下一个步骤,与引擎没有直接关系,它的实现是通过一个外部的GA,创建不同的拓扑结构,那些初始化不同引擎的对象。
是的,你可能应该使用不止一个GA。一个用于拓扑结构,一个用于调整所有网络的所有权重。然后,第二个GA将只是冻结一些基因,这取决于当前的拓扑结构。