2017-02-23 14 views
1

기계 학습을위한 모델 교육의 정확성에 대한 도움이 필요합니다.기계 학습 정확도가 0으로 표시됩니다.

교육용 입력은 500 개의 정수/데이터로 구성된 여러 개의 배열로, 'the_data'라는 데이터 세트의 hdf5 파일에 저장했습니다. 이 예제에서는 100 개의 배열이 있습니다.

[[1,2,3,...500], 
[501,502,...1000], 
[1001,...  ], 
.... 
......   ]] 

출력은 내가 손으로 생성하여 'output.txt'로 저장 한 난수입니다. 100 개의 난수가 있습니다.

다음
194521, 307329, 182440, 180444, 275690,...,350879 

이 내 수정 된 스크립트는 결과가 같다로서 내가 가진 무엇 http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/

import h5py 
from keras.models import Sequential 
from keras.layers import Dense 

seed = 7 
np.random.seed(seed) 

input_data = h5py.File('test.h5', 'r') 
output_data = open("output.txt", "r") 

X = input_data['the_data'][:] 
Y = output_data.read().split(',') 

model = Sequential() 
model.add(Dense(500, input_dim=500, init='normal', activation='relu')) 
model.add(Dense(100, init='normal', activation='relu')) 
model.add(Dense(60, init='normal', activation='relu')) 
model.add(Dense(1, init='normal', activation='sigmoid')) 

model.compile(loss='binary_crossentropy', optimizer='adamax', metrics=['accuracy']) 
model.fit(X, Y, nb_epoch=500, batch_size=10) 
scores = model.evaluate(X, Y) 

print("%s: %.2f%% , %s: %.2f%%" % (model.metrics_names[0], scores[0]*100, model.metrics_names[1], scores[1]*100)) 

을 기반으로이

Epoch 500/500 
100/100 [==============================] - 0s - loss: -4851446.0896 - acc: 0.0000e+00 
100/100 [==============================] - 0s 
loss: -485144614.93% , acc: 0.00% 

사람이 이런 일이 않는 이유에 대한 생각이 있습니까?

도움 주셔서 감사합니다.

답변

3

바이너리 교차 기류가 무엇인지 알고 있습니까?

이진 (0 또는 1) 대상의 손실 함수입니다. 손실은 목표 값에 따라 output 또는 output - 1의 일부 대수입니다. 귀하의 경우에는 적용 할 수 없습니다.

수치를 예측하기를 원하므로 평균 제곱 오차와 같은 것을 사용해야합니다.

정확도는 클래스를 예측하려고하지 않고 실수 값을 예측할 때도 마찬가지입니다. 그것은 좋은 것을 정확히 예측하지 못합니다. 정확도는 예를 들어 바이너리 크로스 트로피와 함께 사용되면 0.7 인 출력을 클래스 1로 분류하거나 0.2는 클래스 0에 분류 할 수 있습니다.

한 가지 더 의견 : 왜 임의 값을 예측하고 싶습니까? 그것은 작동하지 않을 수 있습니다 ... 네트워크는 패턴을 인식해야하며 임의의 타겟에 패턴이 없습니다.

이 정보가 도움이 되었기를 바랍니다.

+0

네, 저에게 crossentropy를 알려 주셔서 감사합니다. 내가 출력에 너무 집중했기 때문에 나는 그다지 생각하지 않았다. 나는 당신이 제안한 것을 더 많이 보게 될 것이다. 또한 네트워크에서 숫자 값을 출력으로 인식 할 수 있는지 확인하려고했습니다. 다른 이유는 없습니다. 답변 해 주셔서 감사합니다. – Fang

1

나는 Nassim Ben에 동의합니다. 다른 방법이 필요 정확도를 계산하기 위해, 그리고이

model.compile(loss='mean_square', optimizer='sgd') 

를 사용해보십시오 :

from sklearn.metrics import mean_squared_error 

mse = mean_squared_error(Y,Y_predicted) 

print('MSE : %.3f' % mse) 
print("Acc = ", 1-numpy.sqrt(mse)) 

이 나를 위해 일했다. 하지만 솔직히 말해서, 케라가 높은 숫자 (0에서 1 사이의 다른 숫자)를 예측할 때 잘 작동하지 않는 것 같아요. 내가 이것에 대해 잘못하면 기쁠 것입니다.

+0

답변 해 주셔서 감사합니다. 나는 'mean_square'에 대한 검색을 했었지만 실제로 그것을 사용하는 방법을 이해하지 못했습니다. 나는 당신이 제안한대로 시도하고 내 질문에 그것을 업데이 트됩니다. – Fang

+0

입력 및 타겟을 정규화하는 것이 좋습니다. Sigmoid 또는 tanh와 같은 활성화를 사용하면 출력이 제한되므로 잘 작동하지 않습니다. –