2016-09-14 3 views
2

В настоящее время я немного играю с тензорным потоком, чтобы создать лучшее понимание машинного обучения самого тензорного потока. Поэтому я хочу визуализировать методы (насколько это возможно) тензорного потока. Чтобы визуализировать max_pool, я загрузил изображение и выполнил этот метод. После этого я отобразил оба: входное и выходное изображение.Как правильно использовать tf.nn.max_pool_with_argmax

import tensorflow as tf 
import cv2 
import numpy as np 

import matplotlib.pyplot as plt 

image = cv2.imread('lena.png') 
image_tensor = tf.expand_dims(tf.Variable(image, dtype=tf.float32), 0) 

#output, argmax = tf.nn.max_pool_with_argmax(image_tensor, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='pool1') 
output = tf.nn.max_pool(image_tensor, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='pool1') 

init = tf.initialize_all_variables() 
session = tf.Session() 
session.run(init) 

output = session.run(output) 

session.close() 

image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) 
plt.figure() 
plt.imshow(image) 
plt.show() 

output = cv2.cvtColor(output[0], cv2.COLOR_RGB2BGR) 
plt.figure() 
plt.imshow(255-output) 
plt.show() 

Все работает отлично, и я получаю этот выход (как и ожидалось)

image (input) enter image description here

Теперь я хотел проверить метод tf.nn.max_pool_with_argmax получить Argmax операций объединения ресурсов. Но если я раскомментировать строку

output, argmax = tf.nn.max_pool_with_argmax(image_tensor, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME', name='pool1')

Python падает с

tensorflow.python.framework.errors.InvalidArgumentError: No OpKernel was registered to support Op 'MaxPoolWithArgmax' with these attrs [[Node: pool1 = MaxPoolWithArgmaxT=DT_FLOAT, Targmax=DT_INT64, ksize=[1, 2, 2, 1], padding="SAME", strides=[1, 2, 2, 1]]]

Я не имею представление о том, какой аргумент является неправильным, потому что каждый аргумент должен быть правильным (tensorflow docs) ...

Кто-нибудь знает, что пошло не так?

ответ

7

Из таблицы the implementation видно, что tf.nn.max_pool_with_argmax() реализован только для GPU. Если вы используете сборку TensorFlow только для CPU, вы получите ошибку формы "No OpKernel was registered to support Op 'MaxPoolWithArgmax' with these attrs ...".

(Это похоже на место, где можно было бы улучшить документацию и сообщение об ошибке.)

+2

является любая альтернатива для запуска max_pool_with_argmax на CPU? – Eliethesaiyan

Смежные вопросы