Deep learning 确定CNN中滤波器矩阵的值

Deep learning 确定CNN中滤波器矩阵的值,deep-learning,keras,conv-neural-network,Deep Learning,Keras,Conv Neural Network,我开始深入学习,有一个关于CNN的基本问题。 我了解如何根据损失函数使用反向传播调整梯度。 但我认为卷积滤波器矩阵的值(CNN的)需要由我们来确定 我正在使用Keras,这是如何(从教程中)定义卷积层的: classifier = Sequential() classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu')) 使用了32个尺寸为3x3的滤波器矩阵 但是,这些32x3x3矩阵的值是如何

我开始深入学习,有一个关于CNN的基本问题。 我了解如何根据损失函数使用反向传播调整梯度。 但我认为卷积滤波器矩阵的值(CNN的)需要由我们来确定

我正在使用Keras,这是如何(从教程中)定义卷积层的:

classifier = Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
使用了32个尺寸为3x3的滤波器矩阵


但是,这些32x3x3矩阵的值是如何确定的?

调整的不是梯度,使用反向传播算法计算的梯度只是网络中每个权重的一组偏导数,这些分量依次用于调整网络权值,以使损耗最小化

看看这个

在您的示例中,卷积层中的权重将初始化为随机值(根据特定方法),然后在训练期间进行调整,在每次迭代时使用梯度来调整每个单独的权重。对于完全连接的层中的权重,或具有权重的任何其他层中的权重也是如此

编辑:我正在添加有关上述答案的更多详细信息

假设你有一个单层的神经网络,它有一些权重W。现在,在向前传递过程中,你计算你的网络的输出yHat,将它与训练样本的预期输出y进行比较,并计算一些成本C(例如,使用二次成本函数)

现在,您对使网络更精确感兴趣,也就是说,您希望尽可能地最小化C。假设您想要为简单函数(如f(x)=x^2)找到最小值。您可以从某个随机点开始(就像您在网络中所做的那样),然后计算该点处函数的斜率(即导数)并沿该方向向下移动,直到达到最小值(至少是局部最小值)

对于神经网络,这是相同的想法,不同的是你的输入是固定的(训练样本),你可以看到你的成本函数C有n个变量,其中n是网络中的权重数。要最小化C,需要成本函数C在每个方向上的斜率(即相对于每个变量、每个权重w),而偏导数向量就是梯度

一旦你有了梯度,你“沿着斜率移动一点”的那部分就是权重更新部分,你根据它的偏导数更新每个网络权重(一般来说,你减去一些学习率乘以该权重的偏导数)

经过训练的网络只是一个网络,它的权重经过多次迭代调整,使得训练数据集上的代价函数C的值尽可能小

对于卷积层也是如此:首先随机初始化权重(即,将自己放置在成本函数C的绘图上的随机位置),然后计算梯度,然后“向下移动”,即,根据梯度调整每个权重,以最小化C

完全连接层和卷积层之间的唯一区别在于它们如何计算输出,以及梯度是如何依次计算的,但是使用梯度更新每个权重的部分对于网络中的每个权重都是相同的

所以,为了回答你的问题,卷积核中的那些滤波器最初是随机的,然后用反向传播算法进行调整,如上所述

希望这有帮助

Sergio0694声明,“在您的示例中,卷积层中的权重将初始化为随机值”。所以如果他们是随机的,并且说我想要10个过滤器。每个执行算法都可以找到不同的过滤器。也就是说我有Mnist数据集。数字由边和曲线组成。是否保证在10分钟内有边缘过滤器或曲线过滤器? 我的意思是,前10个过滤器是我们能找到的最有意义、最有特色的过滤器。
最好的

谢谢你,塞吉奥。我仍然不清楚答案,但我开始阅读你提供的指南。这是一个非常清晰详细的指南,并且已经学到了很多见解。谢谢。@madu您好,我已经在我的答案中添加了更多信息,如果对您有用,请不要忘记将其标记为您问题的有效答案!非常感谢。更新帮助我澄清了一些困惑。你能告诉我这件事吗。对于CNN,卷积核矩阵的值是权重?在使用核矩阵进行过滤之后,结果被馈送到像ReLU这样的激活函数,并且结果被传递到激活映射?