前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytorch定义卷积层

Pytorch定义卷积层

作者头像
mathor
发布2020-01-13 15:51:43
1.8K0
发布2020-01-13 15:51:43
举报
文章被收录于专栏:mathormathor

CNN的讲解可以看我的这篇文章CS231n 笔记:通俗理解 CNN 下面主要讲解一下如何用pytorch实现卷积神经网络

代码语言:javascript
复制
# 卷积神经网络的编写要用到nn.Conv2d
# 该API意为进行2D的函数卷积层计算

import torch
import torch.nn as nn
layer = nn.Conv2d(1, 5, kernel_size=3, stride=1, padding=0)
# 1代表每个kernel的chanel是1,5代表kernel的数量,同时也是输出到下一层的chanel数量
x = torch.rand(1, 1, 28, 28) # 1张图片,1chanel,28*28
out = layer.forward(x)
print(out.shape)
print(layer.weight.size())
print(layer.bias.size())

输出

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

这里可能需要解释一下weight的size,首先第一值5是kernel的数量,也是下一层的chanel数量,第二个值1是input的chanel数量,3和3表示kernel的长宽

需要注意,kernel的chanel必须与input图片的chanel相等,否则会报错,例如定义一个RGB三通道的输入图片,但是kernel的chanel不是3就会报错,见下面的代码

代码语言:javascript
复制
layer = nn.Conv2d(2, 5, kernel_size=3, stride=1, padding=0)
# 2代表每个kernel的chanel是2
x = torch.rand(1, 3, 28, 28) # 1张图片,3chanel,28*28
# 由于输入图片的chanel是3,而kernel的chanel是2,两者不等,所以会报错

除此之外,pytorch还有一种定义卷积神经网络的方法

代码语言:javascript
复制
import torch.nn.functional as F

x = torch.rand(1, 1, 28, 28)
weight = torch.rand(16, 3, 5, 5)
b = torch.randn(16)
out = F.conv2d(x, weight, b, stride=1, padding=1)

当然,上面的写法肯定会报错的,因为我们前面说了,weight的参数分别是kernel的数量、输入图片的chanel,以及kernel的长宽。因为weight中制定输入图片的chanel是3,因此x的chanel必须是3,但是我们定义x的chanel是1,它们发生了矛盾,所以报错了,把x重新定义为3通道x = torch.rand(1, 3, 28, 28),或者把weight的3改成1即可weight = torch.rand(16, 1, 5, 5)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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