gpt4 book ai didi

python - 使用 numpy 实现最大/平均池化(带步幅)

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:02 28 4
gpt4 key购买 nike

我想知道如何使用 numpy 实现简单的最大/均值池化。我在读Max and mean pooling with numpy ,但不幸的是,它假定步幅与内核大小相同。有没有一种 numpythonic 的方法可以做到这一点?如果这适用于任何维度也很好,但当然不是必需的。

最佳答案

这是一个使用 stride_tricks 的纯 numpy 实现:

import numpy as np
from numpy.lib.stride_tricks import as_strided


def pool2d(A, kernel_size, stride, padding=0, pool_mode='max'):
'''
2D Pooling

Parameters:
A: input 2D array
kernel_size: int, the size of the window over which we take pool
stride: int, the stride of the window
padding: int, implicit zero paddings on both sides of the input
pool_mode: string, 'max' or 'avg'
'''
# Padding
A = np.pad(A, padding, mode='constant')

# Window view of A
output_shape = ((A.shape[0] - kernel_size) // stride + 1,
(A.shape[1] - kernel_size) // stride + 1)

shape_w = (output_shape[0], output_shape[1], kernel_size, kernel_size)
strides_w = (stride*A.strides[0], stride*A.strides[1], A.strides[0], A.strides[1])

A_w = as_strided(A, shape_w, strides_w)

# Return the result of pooling
if pool_mode == 'max':
return A_w.max(axis=(2, 3))
elif pool_mode == 'avg':
return A_w.mean(axis=(2, 3))

例子:

>>> A = np.array([[1, 1, 2, 4],
[5, 6, 7, 8],
[3, 2, 1, 0],
[1, 2, 3, 4]])

>>> pool2d(A, kernel_size=2, stride=2, padding=0, pool_mode='max')

array([[6, 8],
[3, 4]])

enter image description here

https://cs231n.github.io/convolutional-networks/

关于python - 使用 numpy 实现最大/平均池化(带步幅),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54962004/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com