2014-02-13 2 views
1

신경 네트워크를 저장하는 데 도움이 필요합니다.훈련 된 신경망을 저장

설명해 드리겠습니다 ... 다층 네트워크를 C#에 프로그래밍했습니다. 응용 프로그램의 일부는 교육용이고 다른 부분은 신경망 테스트 용입니다. 모든 것이 정확하게 작동합니다. 네트워크를 훈련시키고 싶을 때 파일에서 데이터 세트를로드합니다. 훈련이 끝나면 나는 더 작은 데이터 샘플에서 그것을 테스트하고 나에게 올바른 결과를 준다. 하지만 지금은 내 네트워크를 훈련 할 수있게하고 을 저장하여입니다. 그래서 다시로드하여 추가 테스트에 사용할 수 있습니다.

+4

해야이 정말 네트워킹 태그가? – DuncanACoulter

+1

신경망을위한 어떤 프레임 워크를 사용하고 있습니까? 표준 C#/BCL 기능이 아닙니다 :) 직접 작성한 경우 네트워크 직렬화 및 비 직렬화를 수행해야합니다. – Luaan

+8

당신이 C#에서 다층 신경망을 작성하는 방법을 알고, 아직 상태의 저장 방법에 대한 단서가 없다는 것을 조금 이상한 것 같다 ... –

답변

3

기계 학습 클래스가 Bayes (또는 무엇이든)이라고 가정합니다. 일반적으로이 클래스에서 [Serializable]

using System.IO; 
[Serializable] 
public class NaiveBayes 
{ 
    ... 
} 

으로이를 표시 할 것입니다 당신은 당신이 다른 직렬의 경우를 사용할 수 있습니다, 당신의 선택의 단지 일부 직렬은 당신이 여기

public void Save(Stream stream) 
{ 
    YourBinaryFormatter b = new YourBinaryFormatter(); 
    b.Serialize(stream, this); 
} 

YourBinarySerializer

을 절약 할 수있는 방법을 가질 수 네가 원한다. 이 파일들을 읽는 것은 그 반대이며 똑같이 쉽습니다.

3

예, 언급 한대로 Serializable을 사용할 수 있습니다. 그러나 로보틱스에서는 종종 언어 독립적 인 (즉, 쉽게 파싱 가능한) 지식 저장이 필요한데, 이것이 내가이 대답을 추가하는 이유입니다.

그렇다면 데이터 형식의 현재 상태를 어떻게 저장합니까?
1) 유형, 상태 및 가능한 설명자를 작성하십시오. 2) 읽으십시오. 정수 int a = 3를 들어

, 당신은 다음과 같은 내용으로 파일을 작성할 수

integer 
a 
3 

신경망은 정수와 같은 추상적 인 데이터 유형입니다. 토폴로지와 교육 후 최종 가중치로 정의됩니다.

3-6-2 // topology 
test1 // name of neural network, could also be in filename (or timestamp) 
weight matrix [in->hid] 
weight matrix [hid->out] 

당신이 물론 "실제 가중치를 쓰기 대신 할 때 : 의 당신이 = 3에서와 MLP 있다고 가정 해 봅시다 = 2, 당신은 다음과 같은 내용으로 파일을 쓸 수 밖에 = 6, 숨겨 무게 매트릭스 ". 프로그램의 초기화 부분에서 토폴로지를 가져 오거나 트레이닝 단계의 끝에있는 가중치와 함께 토폴로지를 가져올 수 있습니다.

네트워크를 재구성하려면 작성된 파일을 구문 분석하고 읽은 모든 것을 사용하여 이전과 같이 네트워크를 초기화해야하지만 이제는 교육을 생략하십시오. 로봇에 파일을 쓸 수 있어야합니다. 그렇게 할 수 없다면 wifi를 통해 정보를 로컬 컴퓨터로 보내고 거기에 씁니다.

0

내 멀티 레이어 네트워크 구현을 C# here에서 확인할 수 있습니다.

네트워크 구조, 가중치 및 바이어스를 직렬화해야합니다. 앤 라이브러리에는 도우미 메서드가 있습니다.

1 단계.정의 계층 구성 :

var layerConfig = new LayerConfiguration() 
    .AddInputLayer(2) 
    .AddHiddenLayer(5) 
    .AddHiddenLayer(5) 
    .AddOutputLayer(1); 

2 단계 기차 모델 : 당신은 새로운 네트워크 객체를 생성하고 이전에 사용할 수 있습니다

model.SaveModelToJson("model.json"); 

:

model.TrainModel(new List<double> { 0.25, 0.50 }, new List<double> { 1 }); 
model.TrainModel(new List<double> { 0.75, 0.15 }, new List<double> { 0 }); 
model.TrainModel(new List<double> { 0.60, 0.40 }, new List<double> { 1 }); 
... 

단계 3. 저장 JSON 파일에 모델을 훈련 훈련 모델 :

var model2 = new Network("model.json"); 
List<double> output = model2.UseModel(new List<double> { 0.35, 0.45 }); 
관련 문제