kera中的1d CNN音频

时间:2018-02-04 13:22:54

标签: python machine-learning neural-network deep-learning keras

我想尝试实现附加图像的神经网络架构:1DCNN_model

考虑到我有一个数据集X是(N_signals, 1500, 40),其中40是我想要进行1d卷积的要素数。 我的Y是(N_signals, 1500, 2),我正在使用keras。 每1d卷积需要采用如下图所示的一个特征向量:1DCNN_convolution

因此,必须取1500个样本中的一个块,将其传递到1d卷积层(沿时间轴滑动),然后将所有输出要素提供给LSTM层。

我尝试使用此代码实现第一个卷积部分,但我不确定它在做什么,我无法理解它一次只能占用一个块(也许我需要在之前预处理输入数据吗?):

input_shape = (None, 40)
model_input = Input(input_shape, name = 'input')
layer = model_input
convs = []
for i in range(n_chunks):
    conv = Conv1D(filters = 40,
                  kernel_size = 10,
                  padding = 'valid',
                  activation = 'relu')(layer)
    conv = BatchNormalization(axis = 2)(conv)
    pool = MaxPooling1D(40)(conv)
    pool = Dropout(0.3)(pool)
    convs.append(pool)
out = Merge(mode = 'concat')(convs)

conv_model = Model(input = layer, output = out)

有什么建议吗?非常感谢你

2 个答案:

答案 0 :(得分:3)

如果要在40个要素通道上执行单独的1D卷积,则应为输入添加尺寸:

txtField1

如果对形状为

的输入执行1D卷积
(1500,40,1)

过滤器应用于时间维度,您发布的图片表明这不是您想要做的。

答案 1 :(得分:2)

非常感谢,我以这种方式修改了我的代码:

input_shape = (1500,40)                             
model_input = Input(shape=input_shape, name='input')                    
layer = model_input                                                     
layer = Conv1D(filters=40,
               kernel_size=10,
               padding='valid',
               activation='relu')(layer)
layer = BatchNormalization(axis=2)(layer)                           
layer = MaxPooling1D(pool_size=40,
                     padding='same')(layer)                             
layer = Dropout(self.params.drop_rate)(layer)                           
layer = LSTM(40, return_sequences=True,
             activation=self.params.lstm_activation)(layer)         
layer = Dropout(self.params.lstm_dropout)(layer)
layer = Dense(40, activation = 'relu')(layer)
layer = BatchNormalization(axis = 2)(layer)                
model_output = TimeDistributed(Dense(2,
                                     activation='sigmoid'))(layer) 

我实在在想,为了让我的40 mel功能轴上的maxpooling图层工作,我可能需要对轴进行置换...