卷积层将输入和核矩阵进行交叉相关,加上偏移后得到输出
核矩阵和偏移是可学习的参数
核矩阵的大小是超参数
X是输入;K是核矩阵
h:行数 w:列数
Y=输入的高-核的高+1,输入的宽度-核的宽度+1
输出的高度 输出的宽度
#图像卷积
#互相关运算
import torch
from torch import nn
from d2l import torch as d2l
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
#实现二维卷积层
class Conv2D(nn.Nodule):
def __init__(self,kernel_size):
super().__init__()
self.weight=nn.Parameter(torch.rand(Kernel_size))
self.bias=nn.Parameter(torch.zeros(1))
def forward(self,x):
return corr2d(x,self.weight)+self.bias