gpt4 book ai didi

python - Keras 多类分类预测始终相同的标签

转载 作者:太空宇宙 更新时间:2023-11-03 21:00:07 25 4
gpt4 key购买 nike

我想训练一个模型来根据物理信号预测一个人的情绪。我有三个物理信号并将其用作输入功能;

ecg(Electrocardiography), gsr(galvanic skin response), temp(temparature)

在我的数据集中,共有 312 条属于参与者的记录,每条记录中有 18000 行数据。因此,当我将它们合并到一个数据框中时,总共有 5616000 行。

这是我的x_train数据框;

           ecg     gsr   temp
0 0.1912 0.0000 40.10
1 0.3597 0.0000 40.26
2 0.3597 0.0000 40.20
3 0.3597 0.0000 40.20
4 0.3597 0.0000 40.33
5 0.3597 0.0000 40.03
6 0.2739 0.0039 40.13
7 0.1641 0.0031 40.20
8 0.0776 0.0025 40.20
9 0.0005 0.0020 40.26
10 -0.0375 0.0016 40.03
11 -0.0676 0.0013 40.16
12 -0.1071 0.0010 40.20
13 -0.1197 0.0047 40.20
.. ....... ...... .....
.. ....... ...... .....
.. ....... ...... .....
5616000 0.0226 0.1803 38.43

我有 6 个与情绪相对应的类。我已经用数字对这些标签进行了编码;

anger = 0, calmness = 1, disgust = 2, fear = 3, happiness = 4, sadness = 5

这是我的 y_train;

         emotion
0 0
1 0
2 0
3 0
4 0
. .
. .
. .
18001 1
18002 1
18003 1
. .
. .
. .
360001 2
360002 2
360003 2
. .
. .
. .
. .
5616000 5

为了向我的 CNN 提供数据,我正在 reshape train_x 并对 train_y 数据进行热编码。

train_x = train_x.values.reshape(312,18000,3) #because I have 18000 rows in each record and 3 input features
train_y = train_y.values.reshape(312,18000)

trunc_train_y = train_y[:,:1] # to get 1 label for every 18000 column vector of signal
train_y_enc = pd.DataFrame(trunc_train_y)
train_y_enc = pd.get_dummies(train_y_enc[0]) # one hot encoded labels

reshape 后,我创建了我的 CNN 模型;

model = Sequential()
model.add(Conv1D(2,700,activation='relu',input_shape=(18000,3)))
model.add(Conv1D(2,700,activation='relu'))
model.add(MaxPooling1D(4))
model.add(Conv1D(2,700,activation='relu'))
model.add(Conv1D(2,700,activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(6,activation='softmax'))

model.compile(optimizer = sgd, loss = 'categorical_crossentropy', metrics = ['acc'])
model.fit(train_x,train_y_enc,epochs = 300, batch_size = 32, validation_split=0.33, shuffle=False)

问题是,准确率不会超过 0.2,当我检查预测时,它总是预测同一类。我尝试过增加层数调整学习率更改损失函数更改优化器,但是没有任何帮助我解决这个问题。

这是混淆矩阵;

enter image description here

如何解决这个问题?提前致谢。

最佳答案

定义 conv1D 层时存在错误。从代码中可以明显看出,您定义了 2 个过滤器和大小为 700 的内核,但通常大约有 3 个过滤器,并且没有使用大量过滤器。尝试使用它并在没有验证分割的情况下进行训练。

`model = Sequential() 
model.add(Conv1D(64, 3, activation='relu', input_shape=(18000, 3)))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(6, activation='softmax')) `

关于python - Keras 多类分类预测始终相同的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55758783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com