我不明白为什么在官方文档中使用2x2滤镜的5x5补丁的卷积产生32个特征......
卷积每次移动1,所以它应该产生6*6 = 36个特征,而不是32个.有什么东西我不见了吗?
32是一个超参数:一旦定义了网络,就可以选择从输入中提取的特征数量.
输入为28x28x1时,您可以选择学习32个卷积滤波器.学习的卷积滤波器提取单个特征.
W_conv1 = weight_variable([5, 5, 1, 32])
Run Code Online (Sandbox Code Playgroud)
...是一组32个过滤器的定义,每个过滤器大小为5x5x1,网络将在训练阶段后学习.
您可以更改要学习的卷积滤波器的数量,因为它是一个超参数,所以它完全是任意的.
例如,您可以选择从第一个卷积层中提取64个要素,方法是更改上一行,如下所示:
W_conv1 = weight_variable([5, 5, 1, 64])
b_conv1 = bias_variable([64]) #change biases as well
Run Code Online (Sandbox Code Playgroud)
但是您必须在下一层中跟踪此更改.
在本教程中,您将找到另一组卷积过滤器的定义:
W_conv2 = weight_variable([5, 5, 32, 64])
Run Code Online (Sandbox Code Playgroud)
这是一组64个卷积滤波器的定义,每个滤波器的大小为5x5x32.
如果更改第一个图层以提取64个要素,则必须相应地更改此图层:
W_conv2 = weight_variable([5, 5, 64, 64])
Run Code Online (Sandbox Code Playgroud)
这意味着64个提取的特征中的每一个都与另外64个特征相结合:抽象增加.
第一层提取简单的特征(边,线,......),其他层组合提取的特征以形成更复杂的特征.
卷积每次移动1,因此它应该产生6*6 = 36个特征,而不是32.
"shift"(称为stride S)是执行2d卷积时要跳转的像素数.
如果输入的边长为28像素,则带有(第5组)滤波器的卷积输出为 (28 - 5 + 2P)/S=1 + 1 = 24
由于卷积op具有填充参数= SAME,因此P计算值以便产生与输入具有相同大小的输出,因此28.
你的6*6没有任何意义.
不要将提取的特征数(超参数)与激活图的大小混淆.激活映射是输入和学习的卷积滤波器(也称为内核)之间的卷积的结果.
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |