我是卷积神经网络的新手。我正在阅读一些教程并使用Keras
测试一些示例代码。要添加卷积层,基本上我只需要指定内核的数量和内核的大小。
我的问题是每个内核的样子?它们是否适用于所有计算机视觉应用程序?
答案 0 :(得分:1)
我的问题是每个内核的样子?
这取决于您为卷积层选择的参数:
kernel_size
参数,因为它将决定内核的形状和大小。假设您将此参数作为(3,3)
传递(自然地在Conv2D图层上),您将获得3x3内核矩阵。 这取决于您的kernel_initializer
参数,该参数决定了MxN内核矩阵的填充方式。它的默认值为"glorot_uniform"
,在doc page上解释:
Glorot统一初始化器,也称为Xavier统一初始化器。它从[-limit,limit] 中的均匀分布中抽取样本,其中limit为sqrt(6 /(fan_in + fan_out))其中fan_in是权重张量中的输入单位数,fan_out是重量张量中的输出单位数。
这告诉我们它填充内核矩阵的具体方式。您可以选择任何其他您希望满足您需求的内核初始化程序。您甚至可以构建自定义初始值设定项,也可以在that doc页面中进行说明:
from keras import backend as K
def my_init(shape, dtype=None):
#or whatever you want to customize
return K.random_normal(shape, dtype=dtype)
model.add(Dense(64, kernel_initializer=my_init))
此外,它取决于您的kernel_regularizer
参数,该参数定义了应用于内核权重的正则化函数。它的默认值为None
,但您可以从available中选择其他值。您可以再次以类似的方式定义自己的自定义初始值设定项:
def l1_reg(weight_matrix):
#same here, fit your own needs
return 0.01 * K.sum(K.abs(weight_matrix))
model.add(Dense(64, input_dim=64,
kernel_regularizer=l1_reg)
它们是否适用于所有计算机视觉应用程序?
我认为这可能有点宽泛,但我敢冒险说是。 Keras提供了许多内核,专门用于深度学习应用程序;它包括那些在整个文献和众所周知的应用中最常用的那些。
好消息是,如前所述,如果这些内核中的任何内核不符合您的需求,您可以很好地定义自己的自定义初始化程序,或者通过使用正则化来加强它。这使您可以解决您可能遇到的那些非常具体的CV问题。
答案 1 :(得分:0)
在学习过程中学习实际的内核值,这就是为什么你只需要设置内核的数量及其大小。
可能令人困惑的是,学习到的内核值实际上模仿了Gabor和边缘检测过滤器之类的东西。这些是通用的许多计算机视觉应用程序,但它们不是手动设计,而是从大型分类数据集(如ImageNet)中学习。
内核值也是功能层次结构的一部分,可以直接用作各种计算机视觉问题的功能。在这方面,它们也是通用的。