我想尝试实现附加图像的神经网络体系结构:1DCNN_model
考虑我有一个数据集X,它是(N_signals, 1500, 40)
,其中40是我要对其进行一维卷积的要素数量。
我的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)
有什么建议吗?非常感谢你
最佳答案
非常感谢,我以这种方式修改了我的代码:
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)
我实际上是在想,也许为了使maxpooling层能够在我的40个mel特征轴上工作,我可能不得不对轴进行置换...
关于python - 喀拉拉邦的1d CNN音频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48608501/