Suh*_*pta 3 python numpy image-processing convolution conv-neural-network
我在 CNN 上观看Andrew Ng 的视频,想用滤波器6 x 6对图像进行卷积3 x 3。我用 numpy 处理这个问题的方法如下:
image = np.ones((6,6))
filter = np.ones((3,3))
convolved = np.convolve(image, filter)
Run Code Online (Sandbox Code Playgroud)
运行此命令会出现错误:
ValueError: object too deep for desired array
Run Code Online (Sandbox Code Playgroud)
我可以从convolve 的 numpy 文档中理解如何正确使用该convolve方法。
另外,有没有办法可以用 numpy 进行跨步卷积?
np.convolve不幸的是,该函数仅适用于一维卷积。这就是为什么你会收到错误;您需要一个允许您执行二维卷积的函数。
然而,即使它确实起作用了,你实际上还是操作错误了。机器学习中的卷积在数学中更恰当地称为互相关。它们实际上几乎是一样的;卷积涉及翻转滤波器矩阵,然后执行互相关。
要解决您的问题,您可以查看scipy.signal.correlate(另外,不要用作filter名称,因为您会隐藏内置函数):
from scipy.signal import correlate
image = np.ones((6, 6))
f = np.ones((3, 3))
correlate(image, f)
Run Code Online (Sandbox Code Playgroud)
输出:
array([[1., 2., 3., 3., 3., 3., 2., 1.],
[2., 4., 6., 6., 6., 6., 4., 2.],
[3., 6., 9., 9., 9., 9., 6., 3.],
[3., 6., 9., 9., 9., 9., 6., 3.],
[3., 6., 9., 9., 9., 9., 6., 3.],
[3., 6., 9., 9., 9., 9., 6., 3.],
[2., 4., 6., 6., 6., 6., 4., 2.],
[1., 2., 3., 3., 3., 3., 2., 1.]])
Run Code Online (Sandbox Code Playgroud)
这是完全互相关的标准设置。如果您想删除依赖于零填充的元素,请传递mode='valid':
from scipy.signal import correlate
image = np.ones((6, 6))
f = np.ones((3, 3))
correlate(image, f, mode='valid')
Run Code Online (Sandbox Code Playgroud)
输出:
array([[9., 9., 9., 9.],
[9., 9., 9., 9.],
[9., 9., 9., 9.],
[9., 9., 9., 9.]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5661 次 |
| 最近记录: |