【问题标题】:CNN Model giving only 25% results for 4 classes [closed]CNN 模型仅给出 4 个类的 25% 结果 [关闭]
【发布时间】:2020-10-06 11:33:37
【问题描述】:

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

【问题讨论】:

    标签: python tensorflow keras conv-neural-network image-classification


    【解决方案1】:

    你可以试试:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-17
      • 2018-12-14
      • 2017-11-11
      • 1970-01-01
      • 2012-01-07
      • 2021-09-03
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多