2015-01-11 3 views
1

Pybrain에서 간단한 시작 네트워크를 사용하고 있습니다. 내 데이터 (약 200 데이터 포인트)로 그것을 훈련 시켰습니다. 이 데이터는 2 개의 입력과 1 개의 출력입니다.왜 하나의 입력이 다른 입력보다 훨씬 더 많은 무게를 가졌습니까?

필자는 하나의 입력을 동일하게 유지하고 다른 입력에 대해 생각할 수있는 값의 범위를 반복하는 테스트를 수행했습니다. 출력은 두 번째 입력의 가능한 값 전체에서 동일했습니다. 나는 그것을 변화시키기 위해서 가장 높은 가치보다 234.17 배 높아야했습니다.

나는 두 번째 입력을 동일하게 유지하고 첫 번째 입력 만 변경 한 테스트도 수행했습니다. 출력은 첫 번째 입력에 대해 가능한 데이터 값의 처음 0.12 %에 대해서만 변경되었습니다.

네트워크를 더 많은 데이터로 조정하기 만하면됩니까? 아니면 네트워크 설정 방식에 따라 다른 작업을해야합니까?

편집 :

net = buildNetwork(2, 3, 1) 
ds = SupervisedDataSet(2, 1) 
for each in train_data: 
    ds.addSample((each[0], each[1]), (each[2],)) #adds training data to Data Set 
print len(ds) 
trainer = BackpropTrainer(net, ds) #sets up trainer 
print trainer.trainUntilConvergence(maxEpochs=2000, verbose=True) #Trains 
print net.activate([(1420884000%86400),51.74]) #print prediction 

한 입력 (자정 이후 초) 하루의 시간입니다 : 여기

는 NN을 설정 한 값에 대한 예측을 반환하는 코드입니다. 다른 입력은 현재 온도입니다. 출력은 훈련 데이터를 기반으로 임의의 시간에 예측 된 온도 여야합니다.

+0

코드를 보지 않고도 대답하기가 정말 어렵습니다. 오류를 실행하고 명시하는 코드의 작고 작은 부분을 제공 할 수 있습니까? – TankorSmash

+0

음, 입력 및 원하는 동작은 무엇입니까? 신경망은 훈련하기가 어려울 수 있습니다. 이것이 프로그래밍 문제라고 생각하는 이유가 있습니까? 아니면 다르게 행동해야합니까? – Lack

+0

교육 자료를 공유 할 수 있습니까? –

답변

1

는 I 신경 1과 입력이 모두 가능한 최대 값과 0과 1 사이로 스케일링 (또는 데이터 세트에서 최대 값을 보장)하는 경우 네트워크 0.

와 최소 나은 결과를 얻을 일반적으로 여러 개의 입력이있을 때 특히 유용하기 때문에 네트워크가 두 개의 서로 다른 입력에 거의 같은 가중치로 시작하는 것이 어렵지 않습니다. 객관적으로 더 작은 입력은 해당 시스템에 더 중요 할 수 있으며, 두 입력을 모두 0과 1 사이로 조정하면 더 쉽게 달성 할 수 있습니다.