CNN:了解权重输出通道参数
CNN: understanding weights output channel argument
weights = {
# 5x5 conv, 1 input, 32 outputs
'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),
# 5x5 conv, 32 inputs, 64 outputs
'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])),
# fully connected, 7*7*64 inputs, 1024 outputs
'wd1': tf.Variable(tf.random_normal([7*7*64, 1024])),
# 1024 inputs, 10 outputs (class prediction)
'out': tf.Variable(tf.random_normal([1024, num_classes]))
}
我的问题是:
我如何计算 feature/channel 输出的数量,在这种情况下,第一层为 32,第二层为 64,第三层为 1024?如果我在 CNN 中添加多于或少于 32、64、1024 的数字会产生什么影响?
此CNN模型的限制如下:
7x7
由输入图片大小决定。在这种情况下,它是 28x28
在 2 次下采样(池化)操作之后。
- conv层的特征数(
32
,64
)可以任意,但必须对应下一层的深度值。因此,如果您将 32
更改为 48
in wc1
,则还必须将 32
更改为 48
in wc2
.
- FC层的大小相同:
wd1
中的1024
必须对应out
中的1024
。
除此之外,您可以设置任何值,尽管它可能会也可能不会提高网络性能。通常研究将它们设置得尽可能大,以便模型仍然适合 GPU 内存,因为更大的模型往往学得更好。从早期层往下增加尺寸也是有意义的,以捕捉所学特征的复杂性,即第二层的多样性比第一层大。
作为过滤器的数量,例如32、64、128、1024 是设计决定,模型设计者决定使用的滤波器数量。在这种情况下,你。通常使用 2 的幂 2^5 = 32、2^6 = 64 等。不同数量的滤波器显然会影响计算所需的操作数量,此外还会影响模型必须的参数数量学。
例如10 个尺寸为 5x5x1(高 x 宽 x 通道)的过滤器将有 (5 x 5 x 1 + 1) x 10 = 110 个参数进行训练。请注意,+ 1 是偏差项。
我建议阅读以下内容,尤其是关于 ConvNet 架构的部分。
http://cs231n.github.io/convolutional-networks/#architectures
对于卷积运算,我发现 "A guide to convolution arithmetic for deep learning" 足智多谋:https://arxiv.org/abs/1603.07285
weights = {
# 5x5 conv, 1 input, 32 outputs
'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),
# 5x5 conv, 32 inputs, 64 outputs
'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])),
# fully connected, 7*7*64 inputs, 1024 outputs
'wd1': tf.Variable(tf.random_normal([7*7*64, 1024])),
# 1024 inputs, 10 outputs (class prediction)
'out': tf.Variable(tf.random_normal([1024, num_classes]))
}
我的问题是: 我如何计算 feature/channel 输出的数量,在这种情况下,第一层为 32,第二层为 64,第三层为 1024?如果我在 CNN 中添加多于或少于 32、64、1024 的数字会产生什么影响?
此CNN模型的限制如下:
7x7
由输入图片大小决定。在这种情况下,它是28x28
在 2 次下采样(池化)操作之后。- conv层的特征数(
32
,64
)可以任意,但必须对应下一层的深度值。因此,如果您将32
更改为48
inwc1
,则还必须将32
更改为48
inwc2
. - FC层的大小相同:
wd1
中的1024
必须对应out
中的1024
。
除此之外,您可以设置任何值,尽管它可能会也可能不会提高网络性能。通常研究将它们设置得尽可能大,以便模型仍然适合 GPU 内存,因为更大的模型往往学得更好。从早期层往下增加尺寸也是有意义的,以捕捉所学特征的复杂性,即第二层的多样性比第一层大。
作为过滤器的数量,例如32、64、128、1024 是设计决定,模型设计者决定使用的滤波器数量。在这种情况下,你。通常使用 2 的幂 2^5 = 32、2^6 = 64 等。不同数量的滤波器显然会影响计算所需的操作数量,此外还会影响模型必须的参数数量学。
例如10 个尺寸为 5x5x1(高 x 宽 x 通道)的过滤器将有 (5 x 5 x 1 + 1) x 10 = 110 个参数进行训练。请注意,+ 1 是偏差项。
我建议阅读以下内容,尤其是关于 ConvNet 架构的部分。 http://cs231n.github.io/convolutional-networks/#architectures
对于卷积运算,我发现 "A guide to convolution arithmetic for deep learning" 足智多谋:https://arxiv.org/abs/1603.07285