在Fastai面向程序员的前沿深度学习课程7中。 有一行
self.conv1 = nn.Conv2d(3,10,kernel_size = 5,stride=1,padding=2)
那里的10代表过滤器的数量或过滤器将激活的数量吗?如果我错了纠正我吗?
答案 0 :(得分:1)
检查文档https://pytorch.org/docs/stable/nn.html#torch.nn.Conv2d时,您有3个in_channel和10个out_channel,因此这10个out_channel是@ thefifthjack005过滤器,也称为功能。
答案 1 :(得分:0)
Here是您可以找到的
torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride = 1,padding = 0,dilation = 1,groups = 1,bias = True,padding_mode ='zeros')
参数
这个URL具有对过程的可视化帮助。
因此,对于具有3个通道的图像(彩色图像),开头的in_channels
为3。
对于黑白图像,应为1。
一些卫星图像应该有4。
out_channels
将产生卷积,因此这就是过滤器的数量。
让我们创建一个示例来“证明”这一点。
import torch
import torch.nn as nn
c = nn.Conv2d(1,3, stride = 1, kernel_size=(4,5))
print(c.weight.shape)
print(c.weight)
出
torch.Size([3, 1, 4, 5])
Parameter containing:
tensor([[[[ 0.1571, 0.0723, 0.0900, 0.1573, 0.0537],
[-0.1213, 0.0579, 0.0009, -0.1750, 0.1616],
[-0.0427, 0.1968, 0.1861, -0.1787, -0.2035],
[-0.0796, 0.1741, -0.2231, 0.2020, -0.1762]]],
[[[ 0.1811, 0.0660, 0.1653, 0.0605, 0.0417],
[ 0.1885, -0.0440, -0.1638, 0.1429, -0.0606],
[-0.1395, -0.1202, 0.0498, 0.0432, -0.1132],
[-0.2073, 0.1480, -0.1296, -0.1661, -0.0633]]],
[[[ 0.0435, -0.2017, 0.0676, -0.0711, -0.1972],
[ 0.0968, -0.1157, 0.1012, 0.0863, -0.1844],
[-0.2080, -0.1355, -0.1842, -0.0017, -0.2123],
[-0.1495, -0.2196, 0.1811, 0.1672, -0.1817]]]], requires_grad=True)
如果我们要更改out_channels的数量,
c = nn.Conv2d(1,5, stride = 1, kernel_size=(4,5))
print(c.weight.shape) # torch.Size([5, 1, 4, 5])
我们将获得5个过滤器,每个过滤器4x5,因为这是我们的内核大小。 如果我们要设置2个通道,(某些图像可能只有2个通道)
c = nn.Conv2d(2,5, stride = 1, kernel_size=(4,5))
print(c.weight.shape) # torch.Size([5, 2, 4, 5])
我们的过滤器将有2个频道。
我认为他们有this book来的术语,并且由于在那里没有将其称为过滤器,因此他们没有使用该术语。
所以你是对的;过滤器是conv层要学习的内容,过滤器的数量是输出通道的数量。一开始它们是随机设置的。
激活次数是根据bs
和图片尺寸计算的:
bs=16
x = torch.randn(bs, 3, 28, 28)
c = nn.Conv2d(3,10,kernel_size=5,stride=1,padding=2)
out = c(x)
print(out.nelement()) #125440 number of activations