"新神经 "是MetaTrader 5平台的一个开源神经网络引擎项目。 - 页 54

 
TheXpert
我提议先沿途实现echo或SOM,接口可以最终确定。

来吧,什么离你更近?

最简单的应该是MLP。

 
Urain
来吧,什么离你更近?
更接近于回声,更接近于SOM。可能SOM更好,因为它可以在有或没有老师的情况下进行。
 
TheXpert:
更紧密的回声,更轻的SOM。可能比SOM更好,因为它可以在有或没有老师的情况下进行。

SOM是这样的。

1. 网格初始化
2. 网格的工作行程
3.教导网格

谁做什么?

或者,我们应该首先调整类的层次结构?

 
Urain

我在考虑如何使它在训练过程中,新的神经元会在正确的地方诞生,但在研究了算法后,我得出的结论是,它们不会有一个共同的形式化,实际上没有交叉点。这就是为什么我拒绝并专注于建立一个垂直网络。类型。

数据--> 神经元--> 封装的神经网络--> 容器神经网络

使GA成为无定形是可能的。人类基因组并不总是由28000个基因组成。

哎哟...

 
joo:
哦,你在网上。回答关于拓扑结构的问题。
 

第一次估计

class IEvolvable // интерфейс для подключения эволюционных алгоритмов
{
public:
   virtual void GetWeightsAsVector(double& weights[]) const; // получаем все изменяемые веса собранные в одном векторе для генетики
   virtual void ApplyWeightsVector(double weights[]); // применяем подобранные генетикой веса к сети
   
   virtual void FeedInput(double inData[]); // подаем вход
   virtual void PropagateSignal(); // прогоняем входной сигнал
   virtual void GetOutput(double& outData[]) const; // берем выход
};

class ISerializable // сохранение
{
public:
   virtual bool LoadFromFile(string filePath);
   virtual bool SaveToFile(string filePath) const;
};

class IBasicNet
   : public IEvolvable
   , public ISerializable
{
public:
   virtual void FeedInput(double inData[]); // вход можно брать из коллекции или отдельно. Подразумевается, что коллекция включает в себя обработку входов, поэтому отдельные входы надо преобразовывать коллекцией
   virtual void FeedInput(int index);
   virtual void PropagateSignal();
   virtual void GetOutput(double& outData[]) const;
   virtual void Init(); // инициализация. Инициализатор можно подавать в конструкторе, можно в функцию, посмотрим как будет удобно
}

class ISupervised // сеть с учителем
   : public IBasicNet
{
public:
   virtual void SetPatternCollection(PatternCollection* collection); // у сетей с учителем обязательно каждому входному образу соответствует выходной поэтому лучше их сразу организовывать по парам
   virtual void CountError(); // подсчет ошибки. сюда например будет входить ОРО для MLP
   virtual void Learn(); // изменение весов. никаких итераций внутри, чтобы можно было на каждом шаге просмотреть состояние
};

class IUnsupervised // сеть без учителя
   : public IBasicNet
{
public:
   virtual void SetInputCollection(InputCollection* collection); // у сетей без учителя только входы
   virtual void Learn();
};

class IInitializer // инициализатор
{
public:
   virtual void Init(double& value);
   virtual void Init(double& value[]);
   virtual void Init(Matrix& value);
};

 
TheXpert
哦,你在网上。关于拓扑结构的答案。
这是一个 "哎呀"。 就我而言,拓扑管理可以而且应该被视为遗传编程。在这里我不是很强--这是一个独立的庞大的知识领域。但是,如果需要的话,我将密切关注这个问题。它是一种GA,其中染色体长度可以动态变化。在我的GA中,染色体是一个固定的长度。虽然,可以通过引入额外的标志来冻结单个基因,并采取保留染色体的长度来绕过这一点。
 
TheXpert

第一次估计

在上面放一些评论
 
joo:
这就是 "哎呀 "它。
好了,现在,有一个办法可以解决这个问题,我们在做遗传学时再考虑这个问题。
 
Urain
这是下一个步骤,与引擎没有直接关系,它的实现是通过一个外部的GA,创建不同的拓扑结构,那些初始化不同引擎的对象。

是的,你可能应该使用不止一个GA。一个用于拓扑结构,一个用于调整所有网络的所有权重。然后,第二个GA将只是冻结一些基因,这取决于当前的拓扑结构。