前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytorch | 《卷积神经网络》之二维卷积

Pytorch | 《卷积神经网络》之二维卷积

作者头像
ShuYini
发布2019-08-08 15:51:30
1.8K0
发布2019-08-08 15:51:30
举报

引言

大家都知道卷积神经网络被称作为卷积神经神经网络主要是因为其包含卷积层,那么本文会为大家介绍什么是卷积,以及卷积层的主要工作原理。

本文概要

1

如何计算卷积?

2

卷积在图像中的简单应用

3

本文小结

4

参考文献

正文开始

1

如何计算卷积

二维卷积其实就是一个二维数组和一个二维核(kernel)数组之间的互相关运算,然后得到一个新的二维数组的过程。废话不多说,举个例子你就理解了。

如上图所示,输入是一个3x3的二维数组,卷积使用的核采用的是一个2x2的数组,该数组在卷积计算中,又被称为卷积核或者过滤器,它的大小主要取决于这个数组的行数和列数。上图中阴影部分为第一个输出元素及其计算所使用的输入和核数组元素,即:‍‍0×0+1×1+3×2+4×3=19。‍‍

在上述计算过程中,卷积核从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应位置的元素。对于输出数组的主要计算过程如下图所示:

在pytorch中主要实现代码如下:

代码语言:javascript
复制
import torch
from torch.autograd import Variable
input=Variable(torch.tensor([[[[0, 1, 2], [3, 4, 5], [6, 7, 8]]]]).type(torch.FloatTensor))
print(input)
kenal=Variable(torch.tensor([[[[0, 1], [2, 3]]]]).type(torch.FloatTensor))
out=torch.nn.functional.conv2d(input,kenal)
print(out)

输出为:

代码语言:javascript
复制
tensor([[[[0., 1., 2.],
          [3., 4., 5.],
          [6., 7., 8.]]]])
tensor([[[[19., 25.],
          [37., 43.]]]])

注:这里使用pytorch做卷积运算要遵守pytorch一些函数的规则,所以你会看到,上面一个数组会多出很多的[],不明白的小伙伴可以上网查一下资料。

2

卷积在图像中的简单应用

‍‍ ‍‍检测图像中物体的边缘,即找到像素变化的位置。首先我们构造一张6×86×8的图像(即高和宽分别为6像素和8像素的图像)。它中间4列为黑(0),其余为白(1)。如下所示:

代码语言:javascript
复制
[[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.]])  #输入图像

然后我们构造一个高和宽分别为1和2的卷积核K。当它与输入做互相关运算时,如果横向相邻元素相同,输出为0;否则输出为非0。

代码语言:javascript
复制
[[1, -1]] #卷积核K

将输入X和我们设计的卷积核K做互相关运算。可以看出,我们将从白到黑的边缘和从黑到白的边缘分别检测成了1和-1。其余部分的输出全是0。

代码语言:javascript
复制
[[[[ 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.]]]]

由此,我们可以看出,卷积层可通过重复使用卷积核有效地表征局部空间。

3

本文小结

1、 二维卷积层的核心计算是二维互相关运算。在最简单的形式下,它对二维输入数据和卷积核做互相关运算然后加上偏差。

2、可以设计卷积核来检测图像中的边缘。

5

参考文献

[1]http://www.hankcs.com/nlp/word-vector-representations-word2vec.html

[2]http://zh.d2l.ai/chapter_convolutional-neural-networks/conv-layer.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AINLPer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档