2014-06-21 5 views
2

저는 Encog에 뭔가 잘못하고 있다고 생각합니다. 지금까지 본 모든 사례에서 특정 교육 오류가 발생할 때까지 간단히 훈련을 한 다음 결과를 인쇄합니다. 그래디언트가 계산되고 숨겨진 레이어의 가중치가 업데이트되는 시점은 언제입니까? 이 모든 것이 training.iteration() 함수 내에 포함되어 있습니까? 내 훈련 프로그램 오류가 내 프로그램에서 줄어들지 만, 가중치가 변화하고 있음을 암시하는 것처럼 보이지만 네트워크를 통해 유효성 검사 세트를 아직 실행하지 않은 것입니다. 이는 네트워크를 구축 할 때 깨졌으며 훈련 세트에서 분리되었습니다. 교육 오류로 인해 유효성 검증 오류가 계속 감소하는지 확인하기 위해 처음부터 데이터).Encog로 올바르게 훈련 및 검증

또한 트레이너에 유효성 검사 세트를로드하고 compute()를 사용하여 네트워크를 통해 실행했지만 유효성 검사 오류는 항상 교육 오류와 유사하므로 훈련과 동일한 오류인지 여부를 판단하기가 어렵습니다. 한편, 테스트 성공률은 50 % 미만입니다 (학습하지 않을 경우 예상).

많은 종류의 역 전파 기술, 특히 탄성 backpropogation뿐만 아니라 그라디언트 디센트를 사용하는 일반적인 기술이 있습니다. 우리가 수동으로 업데이트 할 것으로 예상되는 네트워크의 부분은 무엇입니까?

답변

3

Encog에서 Train.iteration 메서드 호출 중에 가중치가 업데이트됩니다. 여기에는 모든 가중치가 포함됩니다. 그래디언트 강하 유형 트레이너 (예 : 배경 화면, rprop, quickprop)를 사용하는 경우 각 반복 호출이 끝날 때 신경망이 업데이트됩니다. 인구 통계 기반의 트레이너 (예 : 유전 알고리즘 등)를 사용하는 경우 finishotining을 호출하여 트레이너의 생성자에 전달한 실제 신경망에 최고의 인구가 다시 복사 될 수 있도록해야합니다. 사실, 항상 반복 후 finishTraining을 호출하는 것이 좋습니다. 일부 강사는 그것을 필요로하고 다른 강사는 그렇지 않습니다.

또 다른 사실은 반복자를 호출 할 때 현재 오류를보고하고 일부 반복자는 반복 오류를보고하는 것입니다 (향상된 오류). 이는 일부 강사가 데이터를 두 번 반복하지 않아도되도록 효율성을 높이기위한 것입니다.

교육을 테스트하기 위해 유효성 확인을 유지하는 것이 좋습니다.

BasicNetwork.dumpWeights - 신경망의 가중치를 표시합니다. 이렇게하면 변경되었는지 확인할 수 있습니다. BasicNetwork.calculateError - 여기에 교육 세트를 전달하면 오류가 발생합니다.

+0

죄송합니다. 유효성 검사 단계에서 어떤 일이 발생하는지 혼란스러워합니다. 가중치에 대한 갱신은 없지만 조기 중지는 과도한 수를 방지하기 위해 사용될 수 있습니다. 그러나, _the 구조는 조정될 수 있습니다 _... 뉴런/레이어는 검증 세트에 대한 응답으로 추가/제거 될 수 있습니다. 이 올바른지? –

+0

이것은 다소 까다 롭고 다소 주관적입니다. 일반적으로 유효성 검사 세트가 교육에 영향을 미치기를 원하지는 않습니다. 일반적으로 당신은 이것을 실용적으로 집행해야합니다. 그러나 유효성 검사 점수를 높이기 위해 아키텍처를 수정하고 가중치를 변경하면 유효성 검사 세트를 교육 세트에 통합하는 방법을 사용합니다. 조기 정지는이 규칙을 어기는 것에 가깝지만 일반적인 관행입니다. 교차 검증은 또 다른 접근법입니다. – JeffHeaton

+1

다시 한번 감사드립니다. 녹색 확인이 있습니다! –