какая разница между tf.nn.conv2d с шагами = 2 и tf.nn.max_pool с пулом 2x2?

80
9

Как упоминалось выше, оба

tf.nn.conv2d с шагами = 2

а также

tf.nn.max_pool с 2x2 пулом

может уменьшить размер ввода до половины, и я знаю, что результат может быть другим, но то, что я не знаю, это то, что влияет на итоговый результат тренировки или нет, любая подсказка об этом, спасибо.

спросил(а) 2021-01-19T15:10:01+03:00 9 месяцев назад
1
Решение
79

В обоих примерах предположим, что у нас есть [height, width] ядро, примененное с шагами [2,2]. Это означает, что мы применяем ядро к двумерному окну размера [height, width] на двухмерных входах для получения выходного значения, а затем сдвигаем окно на 2 вверх или вниз, чтобы получить следующее выходное значение.

В обоих случаях вы получаете на 4x меньше выходов, чем входы (в два раза меньше в каждом измерении), если padding='SAME'

Разница заключается в том, как вычисляются выходные значения для каждого окна:

conv2d

    выход представляет собой линейную комбинацию входных значений, умноженных на вес каждой ячейки в ядре [height, width] эти веса становятся обучаемыми параметрами в вашей модели

max_pool

    выход просто выбирает максимальное входное значение в окне [height, width] входных значений нет веса и никаких обучаемых параметров, введенных этой операцией

ответил(а) 2021-01-19T15:10:01+03:00 9 месяцев назад
46

Результаты финальной тренировки могут быть разными, поскольку свертка умножает тензор на фильтр, который вы, возможно, не захотите делать, поскольку он занимает дополнительное вычислительное время, а также может перенастроить вашу модель, поскольку она будет иметь больше веса.

ответил(а) 2021-01-19T15:10:01+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема