TensorFlow मॉडल के साथ भविष्यवाणियां करना


82

मैंने दिए गए mnist ट्यूटोरियल का अनुसरण किया और एक मॉडल को प्रशिक्षित करने और इसकी सटीकता का मूल्यांकन करने में सक्षम था। हालाँकि, ट्यूटोरियल यह नहीं दर्शाते हैं कि किसी मॉडल को दिए गए पूर्वानुमान कैसे बनाए जाते हैं। मुझे सटीकता में कोई दिलचस्पी नहीं है, मैं सिर्फ एक नए उदाहरण की भविष्यवाणी करने के लिए मॉडल का उपयोग करना चाहता हूं और आउटपुट में सभी परिणाम (लेबल) देखें, प्रत्येक को उसके निर्धारित स्कोर (सॉर्ट किए गए या नहीं)।


मैंने एक रिपॉजिटरी बनाई जहां आप संख्याओं को आकर्षित कर सकते हैं और अपने स्वयं के डेटा के साथ मॉडल का परीक्षण कर सकते हैं। github.com/EddieOne/mnist-live-test यह निर्देशों के साथ नहीं आता है। हालाँकि मैंने उच्च स्तरीय अवलोकन के साथ एक वीडियो बनाया था। youtube.com/watch?v=pudJU-cDkMo
एडी

जवाबों:


73

" डीप MNIST फॉर एक्सपर्ट्स " उदाहरण में, इस पंक्ति को देखें:

अब हम अपने प्रतिगमन मॉडल को लागू कर सकते हैं। यह केवल एक लाइन लेता है! हम वेट मैट्रिक्स डब्ल्यू द्वारा वेक्टरकृत इनपुट छवियों को गुणा करते हैं, पूर्वाग्रह बी जोड़ते हैं, और प्रत्येक वर्ग को सौंपे गए सॉफ्टमैक्स संभावनाओं की गणना करते हैं।

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

बस नोड y पर खींचें और आपको वही मिलेगा जो आप चाहते हैं।

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

यह आपके द्वारा बनाए गए किसी भी मॉडल के बारे में लागू होता है - आपने नुकसान की गणना करने से पहले पिछले चरणों में से एक के रूप में भविष्यवाणी की संभावनाओं की गणना की होगी।


1
जब इस सुझाव को कन्वेनेट उदाहरण पर परीक्षण किया जाता है ( 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, सरल सॉफ्टमैक्स उदाहरण के लिए यह ठीक काम करता है। कोई भी विचार ऐसा है?
डैनियल ज़करिसन

3
मैं अपनी खुद की टिप्पणी का जवाब दे सकता हूं: दीक्षांत उदाहरण में feed_dict में एक अतिरिक्त चर है, मैं इसे जोड़ने से चूक गया। इस मामले में feed_dict को इस तरह दिखना चाहिए:feed_dict = {x: [your_image], keep_prob:1.0}
डैनियल ज़करिसन

आपके कोड का आउटपुट कुछ इस तरह होगा, जैसे [फाल्स ट्रू फाल्स ..., ट्रू फाल्स ट्रू], लेकिन मैं इसे [3 1 3 ..., 1 5 1] में बदलना चाहता हूं, जो गलत क्लास लेबल गलत के बजाय । हम उस लेबल को कैसे प्राप्त कर सकते हैं जो गलत के बजाय गलत तरीके से वर्गीकृत किया गया है?
नोमिलक्स

14
tf.run()लगता है हटा दिया गया है, लेकिन y.eval(feed_dict)मेरे लिए काम किया।
astromme

इस प्रश्न के बारे में अधिक पूर्ण विचार, यहाँ पाया जा सकता है, github.com/tensorflow/tensorflow/issues/97 । आशा है कि यह मदद करता है
Pramit

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 संगत जवाब : मान लीजिए कि आपने एक केरस मॉडल बनाया है जैसा कि नीचे दिखाया गया है:

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 Tutorial को देखें ।


2

प्रश्न विशेष रूप से Google MNIST ट्यूटोरियल के बारे में है , जो एक भविष्यवक्ता को परिभाषित करता है, लेकिन इसे लागू नहीं करता है। जोनाथन हुई के TensorFlow अनुमानक ब्लॉग पोस्ट से मार्गदर्शन का उपयोग करते हुए , यहां कोड है जो 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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.