卷积神经网络-卷积层
程序员文章站
2022-03-04 20:11:52
...
卷积神经网络是含有卷积层的神经网络。
通常,在卷积层中使用更加直观的互相关运算。
在二维互相关运算中,卷积窗口从输入数组最左上方开始,按从左往右,从上往下的顺序,一次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并就和,得到输出数组中相应位置的元素。
例如:
0x0 + 1x1 + 3x2 + 4x3 = 19
def corr2d(x,k):
h, w = k.shape
y = torch.zeros(x.shape[0] - h + 1, x.shape[1] - w + 1)
for i in range(y.shape[0]):
for j in range(y.shape[1]):
y[i,j] = (x[i:i + h, j:j+w] * k).sum()
return y
x = torch.tensor([[0,1,2],[3,4,5],[6,7,8]])
k = torch.tensor([[0,1],[2,3]])
corr2d(x,k)
tensor([[19., 25.],
[37., 43.]])
一个应用场景—图像中物体边缘检测
假设有一张6x8的图像,且中间4列时黑(0),其余为白(1),然后构造一个高和宽为1和2的卷积核k。将该卷积核和输入做互相关运算时,如果相邻元素相同,输出0,否则输出非0。
X = torch.ones(6,8)
X[:,2:6] = 0
K = torch.tensor([[1,-1]])
corr2d(X.float(),K.float())
tensor([[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.]])
所以,卷积层可以通过重复使用卷积核有效地表征局部空间