Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个简单的CNN中优化了多少参数?_Python_Keras_Conv Neural Network_Gradient Descent - Fatal编程技术网

Python 在一个简单的CNN中优化了多少参数?

Python 在一个简单的CNN中优化了多少参数?,python,keras,conv-neural-network,gradient-descent,Python,Keras,Conv Neural Network,Gradient Descent,好的,这里是我的CNN(教程中的简单示例)以及一些算法,以获得自由参数的总数 我们有一个28*28灰度图像(MNIST)的数据集 第一层是使用32个3x3内核的二维卷积。输出的维度是26x26x32(内核步长是1,我们有32个26x26的特征映射)运行参数计数:288 第二层是2x2 MaxPool和2x2。输出的维数是13x13x32,但我们将其展平,得到一个长度为5408的向量。这里没有额外的参数 第三层是致密的。5408x100矩阵。输出的维数为100运行参数计数:540988 第四层也是

好的,这里是我的CNN(教程中的简单示例)以及一些算法,以获得自由参数的总数

我们有一个28*28灰度图像(MNIST)的数据集

  • 第一层是使用32个3x3内核的二维卷积。输出的维度是26x26x32(内核步长是1,我们有32个26x26的特征映射)运行参数计数:288
  • 第二层是2x2 MaxPool和2x2。输出的维数是13x13x32,但我们将其展平,得到一个长度为5408的向量。这里没有额外的参数
  • 第三层是致密的。5408x100矩阵。输出的维数为100运行参数计数:540988
  • 第四层也是致密的。100x10矩阵。输出的维度是10运行参数计数:541988
  • 然后我们要在541988参数空间上做随机梯度下降

    这对我来说是个大得可笑的数字。这就是CNN的hello world问题。我是否在理解这是如何工作的过程中遗漏了一些基本的东西?或者也许这个数字是正确的,但对一台计算机来说,这并不是什么大不了的事

    以防万一。以下是如何在Keras中构建模型:

    def define_model():
        model = Sequential()
        model.add(Conv2D(32, (3,3), activation = 'relu', kernel_initializer = 'he_uniform', input_shape=(28,28,1)))
        model.add(MaxPooling2D((2,2)))
        model.add(Flatten())
        model.add(Dense(100, activation='relu', kernel_initializer='he_uniform'))
        model.add(Dense(10, activation='softmax'))
        opt = SGD(lr=0.01, momentum=0.9)
        model.compile(optimizer=opt, loss='categorical_crossentropy', metric=['accuracy'])
        return model
    

    神经网络有很多参数。通常,密集之前的最后一个Conv层稍小一些,以减少参数总数。但神经网络的参数比点多也是正常的。@keiv.fly谢谢。但是,添加更多conv层如何帮助减少参数?这不就是增加参数来优化吗?您所做的只是减少输出信号的参数空间,但增加优化问题的参数空间。或者,为了真正解释我在这里的想法:您添加了另一个conv层,因此您添加了更多的内核,现在我们还需要找出所有这些额外内核的最佳形状。这没什么大不了的,我们有具有数千万到数亿个参数的神经网络,我们可以用SGD很好地训练它们。@MatiasValdenegro谢谢!那么这是否意味着我的算术和理解在计算541988这个数字时是正确的?是的,它看起来是正确的,你可以通过调用model.count_params()来确认