Как ускорить работу не встроенной функции? Как выполнить операцию MaxPool с помощью эллиптического или круглого ядра?

#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?