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 );
};
이것이 "오"입니다. 내 생각에 따르면 토폴로지 제어는 유전 프로그래밍으로 간주될 수 있고 고려해야 합니다. 여기에서 나는 그다지 강하지 않습니다. 이것은 별도의 광대한 지식 영역입니다. 그러나 필요한 경우 이 문제를 자세히 다루겠습니다. 이것은 염색체의 길이가 동적으로 변할 수 있는 그러한 GA입니다. 내 GA는 고정된 길이의 염색체를 가지고 있습니다. 여기에서 개별 유전자를 동결하기 위한 추가 플래그를 도입하여 여기에서 고안하는 것이 가능하지만, 여백을 두고 염색체의 길이를 취하는 것이 가능합니다.
나는 그 과정에서 동시에 구현 또는 에코 또는 SOM을 위한 첫 번째 것을 제안하고 인터페이스는 마침내 정착될 수 있습니다.
자, 당신은 무엇을 선호합니까?
위협은 일반적인 MLP에서 가장 간단합니다.
자, 당신은 무엇을 선호합니까?
더 가까운 에코, 더 가벼운 SOM. SOM이 아마도 더 나을 것입니다. 교사가 있든 없든 할 수 있습니다.
음 메기 그래서 메기.
1. 그리드 초기화
2. 그리드 작업 스트로크
3. 메쉬 트레이닝
누가 무엇을 하고 있습니까?
아니면 클래스 계층 구조를 먼저 해결할까요?
이걸 어떻게 망쳐놔서 학습할 때 새로운 뉴런이 올바른 위치에서 태어나도록 할까 고민했지만, 알고리즘을 연구한 결과, 일반적인 공식화도 없고 교차점도 거의 없다는 결론에 이르렀습니다. 따라서 그는 네트워크의 수직적 구성에 집중하기를 거부했습니다. 유형:
데이터 --> 뉴런 --> 캡슐화된 신경망 --> 컨테이너 신경망
GA를 무정형으로 만드는 것이 가능합니다. 인간 게놈이 항상 28,000개의 유전자로 구성된 것은 아닙니다.
아야...
첫 번째 견적
오, 당신은 온라인 상태입니다. 토폴로지에 대한 답변
첫 번째 견적
이것이 "오"입니다.
이것은 다음 단계이며 엔진과 직접적인 관련이 없습니다. 구현은 다른 엔진의 개체를 초기화하는 다른 토폴로지를 생성하는 외부 GA를 통해 이루어집니다.
그리고 예, 아마도 여러 GA를 사용할 가치가 있습니다. 하나는 토폴로지용이고 다른 하나는 모든 네트워크의 모든 가중치를 조정하기 위한 것입니다. 그런 다음 두 번째 GA는 현재 토폴로지에 따라 일부 유전자를 단순히 동결합니다.