Keras CNN 参数太少

Posted

技术标签:

【中文标题】Keras CNN 参数太少【英文标题】:Keras CNN too few parameters 【发布时间】:2018-10-02 06:36:33 【问题描述】:

我正在尝试在 keras 中使用 3 个输入和 sigmoid 激活函数重新创建以下教程 CNN:

所以参数的数量应该是 7(假设 1 个大小为 2 的过滤器在 2 个位置(前 2 个输入或 2 个较低输入)上卷积,2 个共享权重(在突触上显示为 1.0)并且没有填充conv1d 层)。当我在 Keras 中编写以下内容时:

我在model.summary()查看时只得到5个参数:

我需要做什么才能获得正确数量的参数?由于我是 Keras 新手,因此我的代码中可能有几处错误。

【问题讨论】:

请勿将代码发布为图片。 【参考方案1】:

所有卷积参数在空间上共享(在 1D 的情况下,这意味着跨输入序列)。准确地说,长度为2的卷积滤波器对输入(x[0], x[1])(x[1], x[2])应用了两次,但在这两种情况下它是相同的滤波器,相应的可训练参数也相同。

这解释了你现在得到的模型的大小:Conv1D 有 3 个参数(权重 (2) 和偏差 (1)),密集层有 2 个参数,因为 Conv1D 的输出是 @987654328 @。

最后,我无法评论您尝试实施的网络。可能他们的意思是 2 个过滤器(但该层将有 6 个参数)......但我不知道有任何实现,其中卷积层为每个补丁都有单独的参数。

【讨论】:

好的,谢谢!这是我的画,我现在意识到 conv1d 层应该只有 1 个偏置突触,在文献中仔细检查了它。我仍然不明白为什么密集层中有 2 个而不是 3 个参数:有 2 个 conv1d 输出但是还必须训练的偏差呢? 哦,一个更正:密集层包括偏差 - 它有 1 个权重和 1 个偏差。但是布线不是传统的,因为通常密集层的输入具有等级 2,这意味着 (?, 2, 1) 应该通过扁平化重新整形为 (?, 2)。我以为 keras 会自动完成,但它不会,所以你必须自己添加 Flatten 层。这将导致密集层中的 3 个参数,总共 6 个。

以上是关于Keras CNN 参数太少的主要内容,如果未能解决你的问题,请参考以下文章

Cnn keras模型没有经过训练的参数表示和改进模型

卷积层(CNN)如何在 keras 中工作?

keras构建卷积神经网络(CNN(Convolutional Neural Networks))进行图像分类模型构建和学习

深度学习入门,Keras Conv2D类参数详解

如何找到keras模型的参数数量?

用keras作CNN卷积网络书本分类(书本非书本)