内核大小为1的conv1d和密集层之间有什么区别?

时间:2019-08-16 15:02:20

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

我正在构建具有Conv1D图层的CNN,并且训练得很好。现在,我正在研究如何在将特征添加到模型末尾的Dense层之前减少特征的数量,因此我一直在缩小Dense层的大小,但是后来发现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层的行为是否不同于密集层。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

在3D CNN中,内核在3个方向上移动。 3D CNN的输入和输出数据是4维的。通常用于3D图像数据(MRI,CT扫描)。尚未亲自在比赛中看到应用版本