Tensorflow 平整层的影响及其正确使用

Tensorflow 平整层的影响及其正确使用,tensorflow,deep-learning,keras,Tensorflow,Deep Learning,Keras,我正在研究简单的1D卷积模型,其构建如下 model1=Sequential() 模型1.add(Conv1D(60,32,步幅=1,激活='relu',填充='因果',输入形状=(64,1))) 模型1.add(Conv1D(80,10,步幅=1,激活='relu',填充='因果')) 模型1.add(Conv1D(100,5,步幅=1,激活='relu',填充='因果')) 模型1.add(MaxPoolg1d(2)) model1.add(密集(300,activation='relu')

我正在研究简单的
1D
卷积模型,其构建如下

model1=Sequential()
模型1.add(Conv1D(60,32,步幅=1,激活='relu',填充='因果',输入形状=(64,1)))
模型1.add(Conv1D(80,10,步幅=1,激活='relu',填充='因果'))
模型1.add(Conv1D(100,5,步幅=1,激活='relu',填充='因果'))
模型1.add(MaxPoolg1d(2))
model1.add(密集(300,activation='relu'))
model1.add(展平())
model1.add(密集(1,activation='relu'))
打印(model1.summary())
其模式概述如下

_________________________________________________________________
层(类型)输出形状参数
=================================================================
conv1d_1(conv1d)(无,64,60)1980年
_________________________________________________________________
conv1d_2(conv1d)(无、64、80)48080
_________________________________________________________________
conv1d_3(conv1d)(无,64100)40100
_________________________________________________________________
最大池1 d_1(最大池1(无,32100)0
_________________________________________________________________
密集型_1(密集型)(无,32,300)30300
_________________________________________________________________
展平1(展平)(无,9600)0
_________________________________________________________________
密集型_2(密集型)(无,1)9601
=================================================================
总参数:130061
可培训参数:130061
不可训练参数:0
_________________________________________________________________
如果我将展平层移动到第一个密集层之前,如下所示,我得到了以下模型架构。似乎这一个的模型参数数量比前一个大得多。为什么展平层的放置有如此大的影响?放置展平层的正确方法是什么

model1=Sequential()
模型1.add(Conv1D(60,32,步幅=1,激活='relu',填充='因果',输入形状=(64,1)))
模型1.add(Conv1D(80,10,步幅=1,激活='relu',填充='因果'))
模型1.add(Conv1D(100,5,步幅=1,激活='relu',填充='因果'))
模型1.add(MaxPoolg1d(2))
model1.add(展平())
model1.add(密集(300,activation='relu'))
model1.add(密集(1,activation='relu'))

不同之处在于,在第一种情况下,您有一个通道密集层。该层将使用100 x 300=30000个权重和300个偏差,将100个输入映射到300个输出,总共30300个参数。相同的操作将对其从max_Poolg1d_1输入的所有32个通道重复

在第二种情况下,首先展平输入,因此现在有3200个输入并将其映射到300个输出,需要300 x 3200+300=960300个参数

哪一个是正确的取决于您。在第一种情况下,网络更小,学习更快,更不容易过度拟合,但可能不具备在数据集上提供可用性能所需的表现力。但强制密集层以相同的方式处理所有通道是否有意义?只有实验可以告诉你。你必须尝试两种方法,看看哪一种会产生更好的结果