前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytorch-卷积神经网络的运算流程(中)

Pytorch-卷积神经网络的运算流程(中)

作者头像
用户6719124
发布2019-11-18 21:36:26
7830
发布2019-11-18 21:36:26
举报
文章被收录于专栏:python pytorch AI机器学习实践

以一个更加实际的情况为例

如上图中所列参数,x为1(假设batch为1)张图片、3个通道(对应于RGB三个通道)、28*28的大小。而kernel中的3代表对input的x上的三个通道上均进行卷积运算。而multi-kernels中的16泛指包括了blur、edge等16个功能、3代表对每一个通道上的逐渐进行卷积运算。

因此这里原图片所滑动的框体与kernel进行相乘运算,得到的数值进行累加得到一个数值输出到feature map。

以之前的LeNet-5结构为例

C1上的6代表使用了6个kernels,28*28的size与之前原图片的size一致。由C3的结果可知第二层的kernel为[16, 6, 3, 3],bias为16。这里要求可以从结果逆推出bias和kernel的参数值。

那么这种持续的叠加会输出什么结果呢,如下所示

最初的小汽车经过多个卷积层后依次输出的结果如上,神经网络会从这上面提取到不同的特征结构。这里一般认为第一层的feature map上得到的是一些低维的特征(整体模型、颜色、角度等),第二层的feature map上得到的是一些高维的特征(如棱形结构等),更高层的feature map上会得到一些更高维的特征(如汽车的轮胎结构、车窗位置等)。

总而言之,通过不断地卷积,可以持续提取到不同的特征。

那么在pytorch中,是如何实现这种代码的编写?

代码语言:javascript
复制

# 这种神经网络结构的编写要用到nn.Conv2d
# 该API意为进行2D的函数卷积层计算

import torch
import torch.nn as nn

layer = nn.Conv2d(1, 3, kernel_size=3, stride=1, padding=0)
# 1代表这里假设一张黑白图片,3代表kernel的数量,另外设置kernel size为3,步长为1,不打补丁
x = torch.rand(1, 1, 28, 28)
# 随机代入数据到x
out = layer.forward(x)
# 进行一次卷积的前向运算
print(out.size())
# 输出结果的size查看一下

输出为

代码语言:javascript
复制
torch.Size([1, 3, 26, 26])

这里不进行打padding操作,则输出的size减少

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

本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看

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

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

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