2016-07-13 10 views
0

작업 : 클래스 거리를 입력으로하고 클래스 신뢰도 (0.0 ~ 1.0 사이의 숫자)를 가져 오려고합니다.keras - 출력이 왜 나지?

[ 
    [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
    [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
    ... 
] 

[ 
    [ 
    0.0, 
    0.0, 
    0.0, 
    6.371921190238224, 
    0.0, 
    3.3287083713830516, 
    7.085957828217146, 
    7.747408965761948, 
    5.498717498872398, 
    5.498717498872398, 
    5.498717498872398, 
    5.498717498872398, 
    8.529725281060978 
    ], 
    [ 
    6.396501448825533, 
    0.0, 
    0.0, 
    5.217483270813266, 
    0.0, 
    5.319046151560534, 
    5.823161030197735, 
    3.8991256371824976, 
    6.269856323952211, 
    5.517874167220461, 
    6.396501448825533, 
    5.328678274963717, 
    3.8991256371824976 
    ], 
] 

그리고 그 결과로 내가 약 200 증거를 가지고 : 그래서 뭔가 같은 있습니다. 내 네트워크 건물 코드는 다음과 같습니다

def train(self, distances, classes): 
    """ 
    Train network 
    :param distances: array of distances to classes 
    :type distances: list[list[float]] 
    :param classes: array of class indicators 
    :type classes: list[list[float]] 
    """ 
    example_count, class_count = self._dimensions(distances, classes) 
    self.model = Sequential() 
    self.model.add(Dense(128, input_dim=class_count)) 
    self.model.add(Dense(class_count)) 
    self.model.compile(optimizer=SGD(), loss='mse') 
    self.model.fit(array(distances), array(classes)) 

그러나 훈련 도중

내가 다음 출력을 얻을 : 나는 model.predict(numpy.array([[ 0.0, 0.0, 0.0, 6.371921190238224, 0.0, 3.3287083713830516, 7.085957828217146, 7.747408965761948, 5.498717498872398, 5.498717498872398, 5.498717498872398, 5.498717498872398, 8.529725281060978]])) (기차 세트에서 예)를 사용하려고

Epoch 1/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 2/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 3/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 4/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 5/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 6/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 7/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 8/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 9/10 
425/425 [==============================] - 0s - loss: nan  
Epoch 10/10 
425/425 [==============================] - 0s - loss: nan  

와 - 나는 [[ nan nan nan nan nan nan nan nan nan nan nan nan nan]]

을 받고 데이터 또는 건물 코드에서 무엇이 잘못 될 수 있습니까?

답변

0

내가 맞지 않는 매개 변수 (학습 속도 및 기타)가있는 것처럼 보입니다.

example_count, class_count = self._dimensions(distances, classes) 
    self.model = Sequential() 
    self.model.add(Dense(1024, input_dim=class_count)) 
    self.model.add(Dense(class_count)) 
    self.model.compile(optimizer=SGD(lr=0.002, momentum=0.0, decay=0.0, nesterov=True), loss='mse', metrics=['accuracy']) 
    self.model.fit(array(distances), array(classes), nb_epoch=80) 

그리고 그것은

... 
Epoch 79/80 
425/425 [==============================] - 0s - loss: 0.0381 - acc: 0.6729  
Epoch 80/80 
425/425 [==============================] - 0s - loss: 0.0382 - acc: 0.6871  
[[ 0.19048974 0.1585739 0.28798762 -0.23555818 0.4293299 0.10981751 
-0.08614585 -0.06363138 0.05927059 0.07283521 -0.07852616 -0.02396417 
-0.28515971]] 

안 좋은 accuracity을 제공하지만, 주제의 문제가

해결 : 지금은 (예, 테스트 기간 동안 숨겨진 레이어 뉴런 증가 기차 epochscount 추가) 다음 코드를