我开始深入学习并且在CNN上有一个基本的问题。 我理解如何根据损失函数使用反向传播来调整渐变。 但我认为卷积滤波器矩阵(在CNN中)的值需要由我们确定。
我正在使用Keras,这就是(从教程中)定义卷积层的方式:
classifier = Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
使用32个滤波器矩阵,尺寸为3x3。
但是,这些32x3x3矩阵的值是如何确定的?
答案 0 :(得分:3)
不是调整的梯度,使用反向传播算法计算的梯度只是关于网络中每个权重的偏导数组,而这些组件又用于调整网络权重为了减少损失。
看看这个introductive guide。
示例中卷积图层中的权重将初始化为随机值(根据特定方法),然后在训练期间进行调整,使用每次迭代时的渐变来调整每个单独的权重。完全连接的层或任何其他具有权重的层的权重也是如此。
编辑:我正在添加有关上述答案的更多详细信息。
假设你有一个单层的神经网络,它有一些权重W.现在,在前向传递期间,你计算你的网络的输出yHat,将它与你的预期输出y进行比较训练样本,并计算一些成本C(例如,使用二次成本函数)。
现在,您对使网络更加准确感兴趣,即。你想尽可能地减少C。想象一下,你想找到简单函数的最小值,如f(x)= x ^ 2。您可以从某个随机点开始(就像您对网络所做的那样),然后计算该点处函数的斜率(即导数)并向下移动该方向,直到达到最小值(至少是局部最小值) )。
使用神经网络它是相同的想法,不同的是你的输入是固定的(训练样本),你可以看到你的成本函数C有n个变量,其中n是权重的数量在你的网络中。为了使C最小化,您需要在每个方向上的成本函数C的斜率(即,相对于每个变量,每个权重w),并且偏导数的向量是梯度。
一旦你有了渐变,那么你跟随斜率移动一下的部分"是权重更新部分,您可以根据其偏导数更新每个网络权重(通常,您减去一些学习率乘以相对于该权重的偏导数)。
经过训练的网络只是一个网络,其权重已在多次迭代中进行调整,使得成本函数C相对于训练数据集的值尽可能小。
对于卷积层也是如此:首先随机初始化权重(即,您将自己置于图中用于成本函数C的随机位置),然后计算梯度,然后"下坡",即。您可以按照渐变调整每个重量,以便最小化C.
完全连接层和卷积层之间的唯一区别在于它们如何计算它们的输出,以及如何计算渐变,但是使用渐变更新每个权重的部分对于每个权重都是相同的。网络
所以,为了回答你的问题,卷积内核中的那些过滤器最初是随机的,后来用反向传播算法调整,如上所述。
希望这有帮助!
答案 1 :(得分:1)
Sergio0694陈述,"您示例中卷积层中的权重将初始化为随机值"。所以,如果他们是随机的,并说我想要10个过滤器。每个执行算法都可以找到不同的过滤还说我有Mnist数据集。数字由边和曲线组成。是否保证10中会有边缘滤波器或曲线滤波器? 我的意思是前10个过滤器我们能找到最有意义的最有特色的过滤器。 最好