В настоящее время я немного играю с тензорным потоком, чтобы создать лучшее понимание машинного обучения самого тензорного потока. Поэтому я хочу визуализировать методы (насколько это возможно) тензорного потока. Чтобы визуализировать 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()
Все работает отлично, и я получаю этот выход (как и ожидалось)
Теперь я хотел проверить метод 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) ...
Кто-нибудь знает, что пошло не так?
является любая альтернатива для запуска max_pool_with_argmax на CPU? – Eliethesaiyan