我正在尝试在Keras中重现以下教程中的CNN,该CNN具有3个输入和Sigmoid激活函数:
所以参数数量应该是7(假设有一个大小为2的滤波器,在2个位置上卷积(要么是上两个输入,要么是下两个输入),有2个共享权重(在突触上显示为1.0),并且在conv1d层中没有填充)。当我在Keras中编写以下代码时:
当我在model.summary()
中检查时,我只得到了5个参数:
我需要做些什么才能得到正确数量的参数?由于我刚开始使用Keras,我的代码中可能有几个错误的地方。
回答:
所有卷积参数在空间上是共享的(在1D情况下,这意味着在输入序列上共享)。具体来说,长度为2
的卷积滤波器会应用两次到输入(x[0], x[1])
和(x[1], x[2])
,但这两种情况使用的是同一个滤波器,对应的可训练参数也是相同的。
这解释了你现在得到的模型大小:Conv1D
有3个参数(权重(2)
和偏置(1)
),密集层有2个参数,因为Conv1D
的输出是(?, 2, 1)
。
最后,我无法评论你试图实现的网络。可能他们指的是2个滤波器(但那样的话,层将会有6个参数)…但我不知道有任何实现中卷积层对每个补丁有单独参数的情况。