[tensorflow] TensorFlow 모델로 예측하기

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



답변

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

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


답변

@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]


답변

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 가이드를 참조하세요 .


답변

질문은 특히 예측자를 정의하지만 적용하지 않는 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()


답변