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でしょう。
さあ、もっと近くにあるのは?
Closer echo, lighter SOM.先生の有無にかかわらずできるので、おそらくSOMよりも優れていると思います。
SOMはこんな感じです。
1. メッシュの初期化
2. メッシュの作業ストローク
3.ティーチングメッシュ
誰が何をするのか?
それとも、まずクラスの階層を調整すべきなのでしょうか?
トレーニング中に新しいニューロンが適切な場所に生まれるようにするにはどうしたらいいか考えていましたが、アルゴリズムを検討した結果、共通の形式化ができない、実質的に交点がない、という結論に達しました。だから、私はそれを拒否して、縦のネットワークを作ることに集中した。タイプです。
データ→ ニューロン→ カプセル化されたニューラルネットワーク→ コンテナニューラルネットワーク
GAをアモルファス化することは可能です。ヒトゲノムは、昔から28000個の遺伝子で構成されていたわけではありません。
痛い...
最初の見積もり
あ、オンラインになったんですね。トポロジーについてお答えください。
最初の見積もり
それが「おっとっと」なのです。
これは次のステップで、エンジンとは直接関係ありません。その実装は、異なるトポロジーを作成し、異なるエンジンのオブジェクトを初期化する外部のGAを介して行われます。
そして、そうですね、複数のGAを使うべきでしょう。1つはトポロジー用、もう1つは全ネットワークの重みを調整するためのものです。そうすると、2回目のGAでは、現在のトポロジーに応じて、一部の遺伝子をフリーズさせるだけとなります。