2017-04-02 7 views
1

나는 mnist 데이터와 함께 TF.LEARN을 사용하고있다. 나는 0.96의 정확도로 신경 네트워크를 훈련 시켰지만 지금은 어떻게 값을 예측할 지 잘 모르겠습니다. 여기 MNIST 데이터 세트를 예측할 때 이상한 값을 얻는다

는 .. 내 코드입니다

#getting mnist data to a zip in the computer. 
mnist.SOURCE_URL = 'https://web.archive.org/web/20160117040036/http://yann.lecun.com/exdb/mnist/' 
trainX, trainY, testX, testY = mnist.load_data(one_hot=True) 


# Define the neural network 
def build_model(): 
    # This resets all parameters and variables 
    tf.reset_default_graph() 
    net = tflearn.input_data([None, 784]) 
    net = tflearn.fully_connected(net, 100, activation='ReLU') 
    net = tflearn.fully_connected(net, 10, activation='softmax') 
    net = tflearn.regression(net, optimizer='sgd', learning_rate=0.1, loss='categorical_crossentropy') 
    # This model assumes that your network is named "net"  
    model = tflearn.DNN(net) 
    return model 

# Build the model 
model = build_model() 

model.fit(trainX, trainY, validation_set=0.1, show_metric=True, batch_size=100, n_epoch=8) 

#Here is the problem 
#lets say I want to predict what my neural network will reply back if I put back the send value from my trainX 

the value of trainX[2] is 4

pred = model.predict([trainX[2]]) 
print(pred) 
#What I get is 
[[2.6109733880730346e-05, 4.549271125142695e-06, 1.8098366126650944e-05, 0.003199575003236532, 0.20630565285682678, 0.0003870908112730831, 4.902480941382237e-05, 0.006617342587560415, 0.018498118966817856, 0.764894425868988]] 

내가 원하는 것은 -> 4

문제는 내가이 기능을 예측하고 사용하는 방법을 잘 모르겠습니다이다 trainX 값을 넣어 예측을합니다.

답변

0

tensorflow 예측은 확률적인 결과를 제공합니다. 네트워크 확답을 얻으려면 최대 확률을 가진 레이블을 pred에서 얻는 것으로 충분합니다.

pred = np.argmax(pred, axis=1) 
이 경우 4하지

하지만 np이 NumPy와 모듈 import numpy as np로 가져

(9), 대신 tensorflow의 argmax를 사용하는 tf.argmax(pred, 1)로 대체 주시기 바랍니다.

+0

나는이 PRED = model.predict를 ([trainX [5]]) 인쇄 (np.argmax (PRED)) 수행하여 대답을 얻었다 그러나 tf.argmax에 대해 말해 주셔서 감사합니다 –

+0

(1 PRED) 내 질문에 내가 분명히 wasnt 생각, 난 그냥 기본적으로 np.argmax를 사용하여 인덱스 번호를 계산하는 방법을 알고 싶었 어 ... 혼란에 대 한 미안 해요. 정말 대답에 감사드립니다! –

+0

@MasnadNihit 예측이 1 개 밖에없는 경우 'np.argmax'가 작동합니다. 하나 이상의 인덱스가 있다면, 모든 예측을위한 모든 인덱스를 동시에 얻으려면'np.argmax (pred, 1)'이 필요합니다. –

0

당신은 점수와 결과 배열의 5 번째 값 (5 값이 4 인 동안은 시작부터하는 4

무엇 model.predict 반환과 매우 유사하다, 9를 받고있다 0)은 상대적으로 높은 점수 (0.26 초 높음)를 얻습니다. - 귀하의 모델은 마지막 숫자 (9)에 가장 높은 점수 인 0.76을 부여합니다. 이것은 분류 자의 의미가 약간 잘못되었음을 나타냅니다. 따라서 다른 표기법을 사용하거나 하이퍼 매개 변수를 사용하는 것을 고려해야합니다.

+0

Thanks benieve! 나는 그 문제가 무엇인지 알아 냈다. 여기 내 문제에 대한 최종 해결책이있다. pred = model.predict ([trainX [5]] print (np.argmax (pred)) –

+0

@benieve, 나는 내 질문에 명확하지 않았다고 생각한다. 기본적으로 np.argmax를 사용하여 색인 번호를 계산하는 방법 ... 혼란을 가져 주어서 죄송합니다. 정말 대답에 감사드립니다! –