您好,登录后才能下订单哦!
这篇文章主要为大家展示了“Python中pytorch神经网络图像卷积运算的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中pytorch神经网络图像卷积运算的示例分析”这篇文章吧。
严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算。在卷积层中,输入张量和核张量通过互相关运算产生输出张量。
首先,我们暂时忽略通道(第三维)这一情况,看看如何处理二维图像数据和隐藏表示。下图中,输入是高度为3、宽度为3的二维张量(即形状为 3 × 3 3\times3 3×3)。卷积核的高度和宽度都是2。
注意,输出大小略小于输入大小。这是因为我们需要足够的空间在图像上“移动”卷积核。稍后,我们将看到如何通过在图像边界周围填充零来保证有足够的空间移动内核,从而保持输出大小不变。
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
卷积层对输入和卷积核权重进行互相关运算,并在添加标量偏置之后产生输出。所以,卷积层中的两个被训练的参数是卷积核权重核标量偏置。就像我们之前随机初始化全连接层一样,在训练基于卷积层的模型时,我们也随机初始化卷积核权重。
基于上面定义的corr2d函数实现二维卷积层。在__init__构造函数中,将weight和bias声明为两个模型参数。前向传播函数调用corr2d函数并添加偏置。
class Conv2D(nn.Module): 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
高度和宽度分别为 h和 w的卷积核可以被称为 h × w 卷积或 h × w 卷积核。我们也将带有 h × w 卷积核的卷积层称为 h × w 卷积层。
下图中输出的卷积层有时被称为特征映射(Feature Map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。在CNN中,对于某一层的任意元素 x x x,其感受野(Receptive Field)是指在前向传播期间可能影响 x x x计算的所有元素(来自所有先前层)。
注意,感受野的覆盖率可能大于某层输入的实际区域大小。
例如上图:给定 2 × 2 卷积核,阴影输出元素值19的接收域是阴影部分的四个元素。假设之前输出为 Y ,其大小为 2 × 2 ,现在我们再其后附加一个卷积层,该卷积层以 Y 为输入,输出单个元素 z。再这种情况下, Y上的 z的接收字段包括 Y 的所有四个元素,而输入的感受野包括最初所有九个输入元素。
因此,当一个特征图中的任意元素需要检测更广区域的输入特征时,我们可以构建一个更深的网络。
以上是“Python中pytorch神经网络图像卷积运算的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。