6.2 手写卷积类
  XZVAVmlOqzo6 2023年11月02日 68 0
import torch
from torch import nn
from d2l import torch as d2l

class Conv2D(nn.Module):
    def __init__(self,kernel_size):
        super().__init__()
        self.weight = nn.Parameter(torch.rand(kernel_size)) #如kernel_size= (2,2),则随机初始化一个2x2的卷积
        self.bias = nn.Parameter(torch.zeros(1)) #bias初始化为0
    def forward(self,X):
        return self.corr2d(X,self.weight) + self.bias
    
    # 卷积操作函数
    def corr2d(self,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]):
                # (i,j)是目标区域的左上角坐标
                Y[i,j] = (X[i:i+h,j:j+w] * K).sum()
        return Y

# 测试
X = torch.tensor([[0.0,1.0,2.0],
                  [3.0,4.0,5.0],
                  [6.0,7.0,8.0]])
model = Conv2D(kernel_size=(2,2))
Y = model.forward(X)
print(Y)
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  3XDZIv8qh70z   2023年12月23日   25   0   0 2d2d
XZVAVmlOqzo6