1

我正在使用频谱图在 IEMOCAP 中运行情绪分类模型。

我有 4 个情感类和大约 8900 个样本。

我的模型如下:

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(100,150,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(4))
model.add(Activation('softmax'))

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

图像加载器如下:

for i in tqdm(range(train.shape[0])):
    try:
        img = image.load_img(train['wav_file'][i],target_size=(100,150,3))
        img = image.img_to_array(img)
        img = img/255
        train_image.append(img)

    except:
        print(train['id'][i])

X = np.array(train_image)
y = np.array(train.drop(['id', 'emotion'],axis=1))
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2)

我得到了 25% 的准确率,因为我所有的结果都被归类为 1 类,即无法学习任何东西。如果有人可以指导如何改进结果。

使用 librosa 以 16k Hz 的采样率提取频谱图。

4

1 回答 1

0

您可以尝试的命中:

  • 而不是img = img/255尝试使用数据均值和方差进行归一化,即使其均值单位方差为零。(数据 - data_mean)/data_std。
  • 尝试batch_normalization在池化之前使用层。
  • 如果你的数据不平衡,你class_weights在训练期间
  • 还要评论损失在训练期间如何变化。它有改善吗?如果不是,您必须分析数据。
  • 如果您的数据中有负值,请不要使用relu,而是使用tanh
  • 查看数据分布。

试试这些好处,看看它们如何影响模型的性能。

于 2020-10-06T11:55:08.813 回答