kernel_size=1 的 conv1d 和 dense 层有什么区别?

What is the difference between conv1d with kernel_size=1 and dense layer?

我正在构建一个带有 Conv1D 层的 CNN,它训练得很好。我现在正在研究如何在将特征输入到模型末尾的密集层之前减少特征数量,所以我一直在减小密集层的大小,但后来我遇到了 this article .这篇文章讨论了使用带有 kernel_size=(1,1) 的 Conv2D 过滤器来减少特征数量的效果。

我想知道使用 kernel_size=(1,1) tf.keras.layers.Conv2D(filters=n,kernel_size=(1,1)) 的 Conv2D 层和使用相同大小的 tf.keras.layers.Dense(units=n) 的密集层有什么区别?从我的角度来看(我对神经网络比较陌生),kernel_size=(1,1) 的过滤器是一个单一的数字,它本质上等同于 Dense 层中的权重,并且两层都有偏差,那么它们是等价的,还是我误解了什么?如果我的理解是正确的,在我使用 Conv1D 层而不是 Conv2D 层的情况下,这会改变什么吗? tf.keras.layers.Conv1D(filters=n, kernel_size=1) 等同于 tf.keras.layers.Dense(units=n)?

如果您需要我澄清问题,请告诉我。我最好奇的是,具有 kernel_size=1 的 Conv1D 层和具有 kernel_size=(1,1) 的 Conv2D 层的行为是否与 Dense 层不同。

是的,因为 Dense 层应用于其输入的最后一个维度(参见 ),Dense(units=N)Conv1D(filters=N, kernel_size=1)(或 Dense(units=N)Conv2D(filters=N, kernel_size=1)) 在连接数和可训练参数数量方面基本等同。

在一维 CNN 中,内核在 1 个方向上移动。一维 CNN 的输入和输出数据是二维的。主要用于 Time-Series 数据、自然语言处理任务等。肯定会看到人们在 Kaggle NLP 竞赛和笔记本中使用它。

在 2D CNN 中,内核在 2 个方向上移动。 2D CNN 的输入和输出数据是 3 维的。主要用于图像数据。 肯定会看到人们在 Kaggle CNN 图像处理竞赛和笔记本中使用它

在 3D CNN 中,内核在 3 个方向上移动。 3D CNN 的输入和输出数据是 4 维的。主要用于 3D 图像数据(MRI、CT 扫描)。没有在比赛中亲眼见过应用版本