TensorFlow 모델로 예측하기


81

나는 주어진 mnist 튜토리얼을 따랐고 모델을 훈련시키고 그 정확성을 평가할 수있었습니다. 그러나이 자습서에서는 모델에 대해 예측하는 방법을 보여주지 않습니다. 정확성에는 관심이 없습니다. 모델을 사용하여 새로운 예를 예측하고 출력에서 ​​각각 할당 된 점수 (정렬 여부)와 함께 모든 결과 (레이블)를보고 싶습니다.


숫자를 그리고 자신의 데이터로 모델을 테스트 할 수있는 저장소를 만들었습니다. github.com/EddieOne/mnist-live-test 지침 이 제공되지 않습니다. 그러나 나는 높은 수준의 개요로 비디오를 만들었습니다. youtube.com/watch?v=pudJU-cDkMo
에디

답변:


73

" Deep MNIST for Experts "예제에서 다음 행을 참조하십시오.

이제 회귀 모델을 구현할 수 있습니다. 한 줄이면됩니다! 벡터화 된 입력 이미지 x에 가중치 행렬 W를 곱하고 편향 b를 더한 다음 각 클래스에 할당 된 소프트 맥스 확률을 계산합니다.

y = tf.nn.softmax(tf.matmul(x,W) + b)

노드 y를 당기면 원하는 것을 얻을 수 있습니다.

feed_dict = {x: [your_image]}
classification = tf.run(y, feed_dict)
print classification

이는 생성하는 거의 모든 모델에 적용됩니다. 손실을 계산하기 전에 마지막 단계 중 하나로 예측 확률을 계산하게됩니다.


1
함께합니다 (convnet 예에서이 제안을 테스트 할 때 y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2) 내가 얻을 Invalid argument: You must feed a value for placeholder tensor 'Placeholder_2' with dtype float, 간단한 softmax를 예를 들어 그것을 잘 작동합니다 어떤 아이디어 왜 이렇게되는지.?
다니엘 Zakrisson

3
내 자신의 의견에 답할 수 있습니다. convnet 예제에는 feed_dict에 추가 변수가 있으므로 추가하지 못했습니다. 이 경우 feed_dict는 다음과 같이한다 :feed_dict = {x: [your_image], keep_prob:1.0}
다니엘 Zakrisson

코드의 출력은 [False True False ..., True False True]와 같은 것이지만, 이것을 False 대신 잘못된 클래스 레이블 인 [3 1 3 ..., 1 5 1]로 변환하고 싶습니다. . 거짓 대신 잘못 분류 된 라벨을 어떻게 얻을 수 있습니까?
Nomiluks

14
tf.run()제거 된 것 같지만 y.eval(feed_dict)나를 위해 일했습니다.
astromme

이 질문에 대한 더 완전한 생각은 github.com/tensorflow/tensorflow/issues/97 에서 찾을 수 있습니다 . 도움이
되기를 바랍니다

16

@dga가 제안했듯이 이미 예측 된 모델을 통해 데이터의 새 인스턴스를 실행해야합니다.

예를 들면 다음과 같습니다.

첫 번째 튜토리얼을 진행하고 모델의 정확도를 계산했다고 가정합니다 (모델은 다음과 같습니다 y = tf.nn.softmax(tf.matmul(x, W) + b):). 이제 모델을 잡고 여기에 새 데이터 포인트를 적용합니다. 다음 코드에서는 벡터를 계산하여 최대 값의 위치를 ​​얻습니다. 이미지를 표시하고 최대 위치를 인쇄합니다.

from matplotlib import pyplot as plt
from random import randint
num = randint(0, mnist.test.images.shape[0])
img = mnist.test.images[num]

classification = sess.run(tf.argmax(y, 1), feed_dict={x: [img]})
plt.imshow(img.reshape(28, 28), cmap=plt.cm.binary)
plt.show()
print 'NN predicted', classification[0]

4

2.0 호환 가능 답변 : 아래와 같이 Keras 모델을 구축했다고 가정합니다.

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

그런 다음 아래 코드를 사용하여 모델을 훈련하고 평가합니다.

model.fit(train_images, train_labels, epochs=10)
test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

그 후 특정 이미지의 클래스를 예측하려면 아래 코드를 사용하여 수행 할 수 있습니다.

predictions_single = model.predict(img)

이미지 집합의 클래스를 예측하려면 아래 코드를 사용할 수 있습니다.

predictions = model.predict(new_images)

new_images이미지 배열은 어디에 있습니까 ?

자세한 내용은이 Tensorflow 가이드를 참조하세요 .


2

질문은 특히 예측자를 정의하지만 적용하지 않는 Google MNIST 튜토리얼 에 관한 것입니다. Jonathan Hui의 TensorFlow Estimator 블로그 게시물의 지침을 사용하여 다음은 Google 가이드에 정확히 일치하고 예측을 수행하는 코드입니다.

from matplotlib import pyplot as plt

images = mnist.test.images[0:10]

predict_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x":images},
      num_epochs=1,
      shuffle=False)

mnist_classifier.predict(input_fn=predict_input_fn)

for image,p in zip(images,mnist_classifier.predict(input_fn=predict_input_fn)):
    print(np.argmax(p['probabilities']))
    plt.imshow(image.reshape(28, 28), cmap=plt.cm.binary)
    plt.show()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.