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

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

作者头像
用户6719124
发布2019-11-20 14:20:20
1.1K0
发布2019-11-20 14:20:20
举报
文章被收录于专栏:python pytorch AI机器学习实践

若进行打padding操作

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

此时输出结果为

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

当打补丁后,输出的size与原图片的size一致

若取不同步长时,也会对输出结果造成影响

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

此时步长取2的输出为

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

这种大跨越幅度的读取数据接收的信息量有所减少,进而达到一种降维的目的。

若想查看参数

代码语言:javascript
复制
layer = nn.Conv2d(1, 3, kernel_size=3, stride=2, padding=1)
# 1代表这里假设一张黑白图片,3代表kernel的数量,另外设置kernel size为3
# 步长这里为2
x = torch.rand(1, 1, 28, 28)
# 随机代入数据到x
out = layer.forward(x)
# 进行一次卷积的前向运算
# 输出层间的参数的size查看一下
print(layer.weight.size())

输出为

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

这里第一个3代表3个通道,input channel数量为之前的1,3 3 代表了所取的kernel的size。

代码语言:javascript
复制
layer = nn.Conv2d(1, 3, kernel_size=3, stride=2, padding=1)
# 1代表这里假设一张黑白图片,3代表kernel的数量,另外设置kernel size为3
# 步长这里为2
x = torch.rand(1, 1, 28, 28)
# 随机代入数据到x
out = layer.forward(x)
# 进行一次卷积的前向运算
# 同样可以输出bias进行查看
print(layer.bias.size())

结果为

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

验证了之前所取的channel的数量

这里也有其他书写方法

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

w = torch.rand(16, 3, 5, 5)
# 设置观察的kernel数量为16,input channel为3,kernel size为5*5
b = torch.rand(16)
x = torch.rand(1, 1, 28, 28)

out = F.conv2d(x, w, b, stride=1, padding=1)

print(out.size())

此时输出会报错

代码语言:javascript
复制
Traceback (most recent call last):
    out = F.conv2d(x, w, b, stride=1, padding=1)
RuntimeError: Given groups=1, weight of size 16 3 5 5, expected input[1, 1, 28, 28] to have 3 channels, but got 1 channels instead

报错原因在于input channel数量应该为3, 但所给出的x的input channel数量为1,数据不匹配。

将x数据进行修改即可

代码语言:javascript
复制
w = torch.rand(16, 3, 5, 5)
# 设置观察的kernel数量为16,input channel为3,kernel size为5*5
b = torch.rand(16)
x = torch.rand(1, 3, 28, 28)

out = F.conv2d(x, w, b, stride=1, padding=1)

print(out.size())

此时输出为

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

同样这里可以进行stride和padding的设置

代码语言:javascript
复制
w = torch.rand(16, 3, 5, 5)
# 设置观察的kernel数量为16,input channel为3,kernel size为5*5
b = torch.rand(16)
x = torch.rand(1, 3, 28, 28)

out = F.conv2d(x, w, b, stride=2, padding=2)

print(out.size())

输出为

代码语言:javascript
复制
torch.Size([1, 16, 14, 14])
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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