我正在研究一种具有常规矩阵格式的风力涡轮机数据集:[row:datetime,column:features]
但是我想用卷积来捕获每个这样的功能的进展,就像在LSTM中完成的那样 . 所以,我已经生成了一个具有以下维度的新数据集:
[datetime,15 timesteps,128 features]:每个原始日期时间行现在有15个寄存器连接在一起(t-0,t-1,...,t-14) .
我的计划是在时间步长维度上为每个特征(通道)分别用大小为1x5和步长为5的内核进行卷积 . 获取每个DateTime(批处理),从128个特征中取出长度为5的3个过滤器,输出形状为(无,3128) .
然后我将max-pooling应用于前一个第二维(3)结果,以获得期望输出大小的“最重要的复杂时间步长”:(无,1,128)
最后,我连接了一个密集层进行二进制分类 .
目前的网络架构在keras中实现如下:
model.add( Conv1D(padding = 'valid',filters = nfeatures,strides = 5,kernel_size = 5,
activation = 'relu',input_shape = (timesteps,nfeatures)) )
model.add( MaxPooling1D() )
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
问题是当我检查第一层(conv1d)的权重时,权重具有以下维度:[5,128,128]和偏差[128] .
预期的权重格式是:[5,1,128]为什么是5x128x128? ,我想为每个功能/通道只需要5个权重(内核大小) .
谢谢!
1 回答
Standard convolution filers:
为了获得很好的结果,神经网络很少单独考虑一个特征,相反,它们会促进特征之间的相关性以提取更智能的结果 .
这就是标准卷积滤波器形状的原因:
在此卷积中,所有输入要素都被视为创建新的输出要素 .
How to completely individualize features?
您可以重新排序数据,使功能成为主要组,并使每个组只有一个功能和过滤器 .
然后可以与
TimeDistributed
层并行处理这些组 .老实说,使用标准卷积,你的模型会更强大,但你可能有特殊的理由这样做 .
One individual filter per feature
这需要更多的工作 . 我们需要一个实现depthwise_conv1d的自定义层(Keras不提供),或者我们创建128个单独的conv1D层和1个过滤器(更简单) .
使用第二种方法(muliple conv layers),我们需要一个功能API模型来制作并行的brances .