【问题标题】:1d CNN audio in keraskeras 中的 1d CNN 音频
【发布时间】:2018-02-04 13:22:54
【问题描述】:

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

假设我有一个数据集 X,它是 (N_signals, 1500, 40),其中 40 是我想要进行一维卷积的特征数。 我的 Y 是 (N_signals, 1500, 2),我正在使用 keras。 每个 1d 卷积都需要取一个特征向量,如下图:1DCNN_convolution

因此它必须从 1500 个时间样本中提取一大块,将其通过一维卷积层(沿时间轴滑动),然后将所有输出特征馈送到 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)

有什么建议吗?非常感谢

【问题讨论】:

  • 嗯...有人试图从 cochlear.ai 进行“稀有声音事件检测”网络。效果如何?

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


【解决方案1】:

非常感谢,我的代码是这样修改的:

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 特征轴上工作......

【讨论】:

    【解决方案2】:

    如果您想在 40 个特征通道上执行单独的一维卷积,您应该在输入中添加一个维度:

    (1500,40,1)
    

    如果您对具有形状的输入执行一维卷积

    (1500,40)
    

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

    【讨论】:

    • 问题是 keras 中的 Conv1D 层需要一个形状为 (batch_size, steps, input_dim) 的张量,而我有一个 (batch_size, time_dim, feature_dim) 的张量,我该如何通过一维图层?
    • 检查 keras Reshape 层
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2018-02-02
    • 2021-09-27
    • 2020-04-18
    • 2019-12-24
    • 2020-11-07
    相关资源
    最近更新 更多