2

코드에 문제가 있습니까? 아니면 더 많은 입력 데이터 레코드를 포함하고 숨겨진 레이어의 수를 변경해야합니까? 나는이 tutorial (대학원 4) 내가간단한 ANN을 구현했지만 원하는 출력을 얻지 못했습니다.

로 내 출력을 얻고있다

import cv2 
import numpy as np 

ann = cv2.ml.ANN_MLP_create() 
ann.setTrainMethod(cv2.ml.ANN_MLP_RPROP | cv2.ml.ANN_MLP_UPDATE_WEIGHTS) 
ann.setActivationFunction(cv2.ml.ANN_MLP_SIGMOID_SYM) 
ann.setLayerSizes(np.array([10, 9, 3])) 
ann.setTermCriteria((cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)) 

i1 = [190, 150, 170, 290, 280, 270, 400, 320, 330,349] 
i2 = [95, 95, 31, 64, 98, 39, 18, 12, 48,74] 
i3 = [48, 45, 19, 78, 23, 32, 30, 32, 33,79] 

o1 = [0, 0, 1] 
o2 = [0, 1, 0] 
o3 = [1, 0, 0] 

SAMPLES = 5000 
for x in range(0, SAMPLES): 
    print "Samples %d/%d" % (x, SAMPLES) 
    ann.train(np.array([i1,i2,i3], dtype=np.float32), cv2.ml.ROW_SAMPLE, np.array([o1,o2,o3], dtype=np.float32)) 

print ann.predict(np.array([i1], dtype=np.float32)) 
print ann.predict(np.array([i2], dtype=np.float32)) 
print ann.predict(np.array([i3], dtype=np.float32)) 

(0.0, array([[nan,   nan,   nan]], dtype=float32)) 
(0.0, array([[nan,   nan,   nan]], dtype=float32)) 
(0.0, array([[nan,   nan,   nan]], dtype=float32)) 

하지 예상 출력이어야한다

(0.0, ....... 
(1.0, ....... 
(2.0, ....... 

하는 이유는 무엇입니까 '유모'를 말하는거야 ?

ANN이 보지 못한 데이터의 출력을 예측하는 다른 방법이 있습니까? 예 - [84,43,89,74,45,32,78,46,43,45]

+0

정규화 된 데이터를 학습합니까? ANN은 범용 함수 aproximator이므로 "양호한"교육을 수행하면 ANN이 보이지 않는 데이터에 대한 예측을 수행 할 수 있습니다. – viceriel

+0

아직 데이터를 정규화하지 않았습니다. ANN이 이미 본 데이터에 대한 출력을 예측합니다. 그것에 관계없이 올바른 출력을 제공해야합니다. –

답변

0

너무 긴 herning 속도 매개 변수를 설정하면 내 ANL 라이브러리에서이 문제가 발생합니다. 가중치는 oslilating (1, -1.5,2, -2.5 0- "양호한 가중치")을 시작하고 변수 범위에서 빠져 나갑니다. 더 큰 네트워크는 더 낮은 속도의 매개 변수를 가져야합니다.