【问题标题】:What is the difference between conv1d with kernel_size=1 and dense layer?kernel_size=1 的 conv1d 和密集层有什么区别?
【发布时间】:2019-08-16 15:02:20
【问题描述】:

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

我想知道使用具有 kernel_size=(1,1) tf.keras.layers.Conv2D(filters=n,kernel_size=(1,1)) 的 Conv2D 层和使用相同大小的 Dense 层 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 层不同。

【问题讨论】:

    标签: tensorflow keras neural-network conv-neural-network tf.keras


    【解决方案1】:

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

    【讨论】:

    • 我对这个问题学到的精英和技术上合理的解释是纯粹的 CNN 没有 MLP,而是使用内核大小 1 来实现类似的功能。
    • @TheLoneDeranger 澄清一下,当你说 MLP 时,我认为你指的是密集层,对吗?
    • 没错。当然,在绝大多数实际情况下,没必要学究气。如果可以的话,不妨使用密集层。我可以想象一些硬件神经网络可能由“纯”CNN 优化,但除此之外...... :)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多