Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras多类分类预测的标签总是相同的_Python_Tensorflow_Keras - Fatal编程技术网

Python Keras多类分类预测的标签总是相同的

Python Keras多类分类预测的标签总是相同的,python,tensorflow,keras,Python,Tensorflow,Keras,我想训练一个模型,从物理信号预测一个人的情绪。我有三个物理信号,并使用它作为输入功能 ecg(心电图)、gsr(皮肤电反应)、温度(温度) 在我的数据集中,参与者共有312条记录,每条记录中有18000行数据。因此,当我将它们组合到单个数据帧中时,总共有5616000行 这是我的xu列车数据帧 ecg gsr temp 0 0.1912 0.0000 40.10 1 0.3597 0.0000 40.26 2 0

我想训练一个模型,从物理信号预测一个人的情绪。我有三个物理信号,并使用它作为输入功能

ecg(心电图)、gsr(皮肤电反应)、温度(温度)

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

这是我的
xu列车
数据帧

           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门课,与情绪相对应。我用数字对这些标签进行编码

愤怒=0,平静=1,厌恶=2,恐惧=3,快乐=4,悲伤=5

这是我的火车

         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提供信息,我正在重塑x列,并对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
重塑之后,我创建了我的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,当我检查预测时,它总是预测同一类。我曾尝试增加层数使用学习率更改损失函数更改优化器,但没有任何帮助我解决这个问题

这是混淆矩阵


我怎样才能解决这个问题?提前感谢。

定义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')) `

定义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')) `

你对数据的处理看起来很奇怪。我认为应该是
(train\u sample\u length,num\u features)
。另外,为什么您的
列车是
(31218000)
形状的?它应该是
(train\u sample\u length,num\u classes)。
我可以在您的案例中看到
num\u features=3
num\u classes=5
@Anakin,因为我总共有312条不同的记录。我正在转换信号,使每个信号序列对应于一行。因此,每行有18006列(信号长度+一个热编码标签)。我在做转置操作,因为我不想标记信号的每一毫秒,最好转置它并只标记一次。得到312部分。也许你应该考虑整个5616000行和洗牌的数据,并分为培训和validation@Anakin,如果我将它以5616000行的形式洗牌,那么所有的信号结构都会被破坏。也许我把你的问题搞错了。好的,告诉我:对于预测,您想输入一个3d向量
[ecg gsr temp]
并预测
情绪吗?您对数据的处理看起来非常奇怪。我认为应该是
(train\u sample\u length,num\u features)
。另外,为什么您的
列车是
(31218000)
形状的?它应该是
(train\u sample\u length,num\u classes)。
我可以在您的案例中看到
num\u features=3
num\u classes=5
@Anakin,因为我总共有312条不同的记录。我正在转换信号,使每个信号序列对应于一行。因此,每行有18006列(信号长度+一个热编码标签)。我在做转置操作,因为我不想标记信号的每一毫秒,最好转置它并只标记一次。得到312部分。也许你应该考虑整个5616000行和洗牌的数据,并分为培训和validation@Anakin,如果我将它以5616000行的形式洗牌,那么所有的信号结构都会被破坏。也许我把你的问题搞错了。好的,告诉我:对于预测,是否要输入3d向量
[ecg gsr temp]
,并预测
情绪
?这与其说是答案,不如说是一个注释。如果我删除GlobalAvaragePoolling1D(),它会生成一个错误<代码>检查目标时出错:预期稠密_9有3维,但得到了形状为(312,6)的数组。
这与其说是答案,不如说是注释。如果删除GlobalAvaragePoolling1D(),它将生成一个错误<代码>检查目标时出错:预期密集_9有3维,但得到了形状为(312,6)的数组。