我目前正在尝试重新创建本文的结果,其中他们从 log-melfilter 能量的“频谱图”中进行特征提取..
由于论文没有说明我正在寻找什么样的特征,我目前正在尝试提取特征,并将它们与 MFCC 特征相匹配。该论文阐述了一种称为LWS(有限权重共享)的技术,其中频谱图频率轴将被划分为多个部分,并且每个部分不与其他部分共享它们的权重。
因此,我将输入图像分为 13 个部分,以从 (6,3,3) 输入图像中接收 1 个输出特征。6 为行数,每列 3 表示给定日志 melfilter energi 的 [static delta delta_delta] 数据,最后 3 为颜色通道。
如果我使用了 13 个滤波器组并制作了绘图,那么结果是否会是每个 (1,3,3) 矩阵都会产生一个特征,但这似乎有点好得令人难以置信,所以我决定使用 78 个滤波器组并将其分为 13 个部分,这应该会导致可以从大小为 (6,3,3) 的矩阵中提取一个特征
我正在使用这种模型结构训练网络:
def create_model(init_mode='normal',activation_mode='softsign',optimizer_mode="Adamax", activation_mode_conv = 'softsign'):
model = Sequential()
model.add(ZeroPadding2D((6,4),input_shape=(6,3,3)))
model.add(Convolution2D(32,3,3 , activation=activation_mode_conv))
print model.output_shape
model.add(Convolution2D(32, 3,3, activation=activation_mode_conv))
print model.output_shape
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,1)))
print model.output_shape
model.add(Convolution2D(64, 3,3 , activation=activation_mode_conv))
print model.output_shape
model.add(Convolution2D(64, 3,3 , activation=activation_mode_conv))
print model.output_shape
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,1)))
model.add(Flatten())
print model.output_shape
model.add(Dense(output_dim=32, input_dim=64, init=init_mode,activation=activation_mode))
model.add(Dense(output_dim=13, input_dim=50, init=init_mode,activation=activation_mode))
model.add(Dense(output_dim=1, input_dim=13, init=init_mode,activation=activation_mode))
model.add(Dense(output_dim=1, init=init_mode, activation=activation_mode))
#print model.summary()
model.compile(loss='mean_squared_error',optimizer=optimizer_mode)
return model
由于某种原因,这个模型一直给我带来非常糟糕的结果。我似乎一直在损失 216,这几乎是数据范围的 3 倍......
我做了一个网格搜索来找出哪个参数(激活函数、init_mode、epochs 和 batch_size 最好,它们是在上面的函数中选择的(尽管结果没有太大变化..)
我该怎么做才能获得更好的结果?CNN 网络设计不好?