CNN模型仅给出4类的25%结果

时间:2020-10-06 11:33:37

标签: python tensorflow keras cnn image-classification

我正在使用光谱图在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采样率提取频谱图。

1 个答案:

答案 0 :(得分:0)

您可以尝试的命题:

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

尝试这些特权,让我们看看它们如何影响模型的性能。