#python #tensorflow #max-pooling
Вопрос:
Я написал код, который выполняет операцию MaxPool с тензорами. В этом коде я использовал два цикла for для перемещения ядра по матрице. Однако, когда я запустил этот код, я увидел, что написанный мной код работает в 50 раз медленнее, чем функция ready. Вы можете увидеть мою собственную функцию следующим образом:
kernel = np.ones((k,k))
p = round(0.5*(k-1))
pA = np.pad(image, ((p,p),(p,p)), 'constant')
dilated_image = np.zeros_like(image)
for i in range(image.shape[0]):
for j in range(image.shape[1]):
dilated_image[i,j] = np.multiply(pA[i:i k,j:j k],kernel).max()
return dilated_image
Вы можете увидеть результаты следующим образом:
Результат синхронизации моей собственной функции:
Результат синхронизации функции Tensorflow MaxPool:
Как вы думаете, что может быть причиной такой проблемы и как я могу ускорить этот код? Кроме того, есть ли способ сделать эллиптическое ядро в операции MaxPool в tensorflow?
Комментарии:
1. В общем, вы можете применить распараллеливание, используя многопроцессорную библиотеку, например, с пулом. Однако, не будучи уверенным, я предполагаю, что Тензор реализован в C, просто завернутый в Python, что является основным источником ускорения
2. @FloLie спасибо за быстрый ответ. Знаете ли вы способ сделать максимальное объединение с эллиптическим ядром в Tensorflow?