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 参数太少的主要内容,如果未能解决你的问题,请参考以下文章
keras构建卷积神经网络(CNN(Convolutional Neural Networks))进行图像分类模型构建和学习