我正在使用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层的行为是否不同于密集层。
最佳答案
是的,因为Dense
层应用于其输入的最后一个维度(请参阅this answer),所以就连接和可训练参数的数量而言,Dense(units=N)
和Conv1D(filters=N, kernel_size=1)
(或Dense(units=N)
和Conv2D(filters=N, kernel_size=1)
)基本上彼此等效。
关于tensorflow - 内核大小为1的conv1d与密集层之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57526932/