我正在使用 GTZAN 数据集制作 CNN 并按音乐流派进行分类。
除了 Val,我得到了很好的结果。损失(见图)
我正在使用 Librosa 处理音频文件,获取频谱图,然后使用 power_to_db 函数。
这是我的 CNN 模型:
class CNNModel(object):
def __init__(self, config, X):
self.filters = 32 # number of convolutional filters to use
self.pool_size = (2, 2) # size of pooling area for max pooling
self.kernel_size = (3, 3) # convolution kernel size
self.nb_layers = 4
self.input_shape = (128, 625, 1) # cambiar por x.shape
def build_model(self, nb_classes):
model = Sequential()
model.add(
Conv2D(
self.filters,
self.kernel_size,
padding ='same',
input_shape = self.input_shape))
model.add(BatchNormalization(axis=1))
model.add(Activation('relu'))
model.add(
Conv2D(
self.filters,
self.kernel_size))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size = self.pool_size))
model.add(Dropout(0.25))
model.add(
Conv2D(
self.filters + 32,
self.kernel_size,
padding ='same'))
model.add(Activation('relu'))
model.add(
Conv2D(
self.filters + 32,
self.kernel_size,
padding ='same'))
model.add(MaxPooling2D(pool_size = self.pool_size))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation("softmax")) #mirar
return model
如果您想查看整个代码,我会留下我的 github 的链接。
每首歌都是 (128, 625) 形状,我使用 MinMaxScale 来缩放数据。
这是我的损失函数和优化器
loss = losses.categorical_crossentropy,
optimizer = optimizers.SGD(lr=0.001, momentum=0, decay=1e-5, nesterov=True)
我读过关于过度拟合的文章,这似乎是原因,但我不知道如何在代码级别解决它。

