Postępowałem zgodnie z podanymi samouczkami mnist i byłem w stanie wytrenować model i ocenić jego dokładność. Jednak samouczki nie pokazują, jak tworzyć prognozy na podstawie modelu. Nie interesuje mnie dokładność, chcę tylko użyć modelu do przewidzenia nowego przykładu, a na wyjściu zobaczyć wszystkie wyniki (etykiety), każdy z przypisaną oceną (posortowaną lub nie).
tensorflow
user247866
źródło
źródło
Odpowiedzi:
W przykładzie „ Deep MNIST for Experts ” zobacz ten wiersz:
Po prostu pociągnij węzeł y, a będziesz mieć to, czego chcesz.
feed_dict = {x: [your_image]} classification = tf.run(y, feed_dict) print classification
Odnosi się to do prawie każdego utworzonego modelu - prawdopodobieństwo przewidywania zostanie obliczone jako jeden z ostatnich kroków przed obliczeniem straty.
źródło
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
otrzymałemInvalid argument: You must feed a value for placeholder tensor 'Placeholder_2' with dtype float
, w przypadku prostego przykładu softmax działa dobrze. Jakieś pomysły, dlaczego tak jest?feed_dict = {x: [your_image], keep_prob:1.0}
tf.run()
wydaje się, że został usunięty, aley.eval(feed_dict)
działał dla mnie.Jak zasugerował @dga, musisz uruchomić nową instancję danych, korzystając z już przewidywanego modelu.
Oto przykład:
Załóżmy, że przeszedłeś przez pierwszy samouczek i obliczyłeś dokładność swojego modelu (model jest taki
y = tf.nn.softmax(tf.matmul(x, W) + b)
:). Teraz chwyć model i zastosuj do niego nowy punkt danych. W poniższym kodzie obliczam wektor, uzyskując położenie maksymalnej wartości. Pokaż obraz i wydrukuj to maksymalne położenie.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]
źródło
Zgodna odpowiedź 2.0 : Załóżmy, że zbudowałeś model Keras, jak pokazano poniżej:
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'])
Następnie wytrenuj i oceń model za pomocą poniższego kodu:
model.fit(train_images, train_labels, epochs=10) test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
Następnie, jeśli chcesz przewidzieć klasę konkretnego obrazu, możesz to zrobić za pomocą poniższego kodu:
Jeśli chcesz przewidzieć klasy zbioru obrazów, możesz użyć poniższego kodu:
gdzie
new_images
jest tablica obrazów.Więcej informacji można znaleźć w tym samouczku Tensorflow .
źródło
Pytanie dotyczy w szczególności samouczka Google MNIST , który definiuje predyktor, ale go nie stosuje. Korzystając ze wskazówek z posta na blogu Jonathana Hui TensorFlow Estimator , oto kod, który dokładnie pasuje do samouczka Google i zawiera prognozy:
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()
źródło