pytorch学习笔记-高阶篇(卷积神经网络)
本篇主要记录一下卷积神经网络的相关知识
一、多通道
对于原来1通道的28*28的一个Image通过7个不同的卷积核,可以理解为从7个不同的角度观察这个图片,得到7个通道的新的feature map
下面以该图为例,解释各参数的size
- x:[batch_size, ch_in, 28, 28]
[b, 3, 28, 28],3是表示 RGB 3通道 - 单个卷积核:[ch, 3, 3]
[3, 3, 3],3同样表示 RGB 3通道,这里必须和输入的通道数匹配,后面的是卷积核的size - 多个卷积核:[16, ch, 3, 3]
16表示卷积核的个数,这里是单纯地复制,是完全一样的16个(批) - bias:16
- output:[batch_size, ch_in, 28, 28]
[b, 16, 28, 28]
二、API使用
小写的nn.F中的conv2d和Conv2d用法含义类似(参数有所不同[input,kerbel,output,stride等…])),这里不再赘述
layer = nn.Conv2d(in_channels=1, out_channels=3, kernel_size=3, stride=1, padding=0)
x = torch.rand(1, 1, 28, 28)
out = layer.forward(x)
# Out[4]: torch.Size([1, 3, 26, 26])
layer = nn.Conv2d(in_channels=1, out_channels=3, kernel_size=3, stride=1, padding=1)
out = layer.forward(x)
# Out[6]: torch.Size([1, 3, 28, 28])
layer = nn.Conv2d(in_channels=1, out_channels=3, kernel_size=3, stride=2, padding=1)
out = layer.forward(x)
# Out[8]: torch.Size([1, 3, 14, 14])
# 推荐写法,比调用.forward()会多hooks等操作
out = layer(x)
# Out[10]: torch.Size([1, 3, 14, 14])
layer.weight
'''
Out[11]:
Parameter containing:
tensor([[[[ 0.1400, -0.1054, -0.2047],
[ 0.0872, -0.0277, 0.2177],
[-0.2424, -0.0359, -0.1245]]],
[[[-0.0275, -0.1923, -0.0423],
[ 0.2632, -0.0316, 0.2044],
[ 0.2014, -0.2908, 0.3193]]],
[[[-0.1514, 0.2244, 0.0760],
[-0.1666, -0.0105, 0.1731],
[ 0.2147, 0.1257, 0.0294]]]], requires_grad=True)
'''
layer.weight.shape
# Out[12]: torch.Size([3, 1, 3, 3])
layer.bias.shape
# Out[13]: torch.Size([3])
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不听话的兔子君!