Oza*_*ver 4 python neural-network deep-learning keras tensorflow
我想训练一个模型来从物理信号中预测一个人的情绪。我有一个物理信号并将其用作输入功能;
心电图(心电图)
在我的数据集中,共有312条记录属于参与者,每条记录有18000行数据。因此,当我将它们组合成一个数据框时,总共有5616000行。
这是我的train_x
数据框;
ecg
0 0.1912
1 0.3597
2 0.3597
3 0.3597
4 0.3597
5 0.3597
6 0.2739
7 0.1641
8 0.0776
9 0.0005
10 -0.0375
11 -0.0676
12 -0.1071
13 -0.1197
.. .......
.. .......
.. .......
5616000 0.0226
Run Code Online (Sandbox Code Playgroud)
我有6个类对应于情绪。我用数字对这些标签进行了编码;
愤怒 = 0,冷静 = 1,厌恶 = 2,恐惧 = 3,快乐 = 4,悲伤 = 5
这是我的 train_y;
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
Run Code Online (Sandbox Code Playgroud)
为了馈送我的 CNN,我正在重塑 train_x 和一个热编码 train_y 数据。
train_x = train_x.values.reshape(312,18000,1)
train_y = train_y.values.reshape(312,18000)
train_y = train_y[:,:1] # truncated train_y to have single corresponding value to a complete signal.
train_y = pd.DataFrame(train_y)
train_y = pd.get_dummies(train_y[0]) #one hot encoded labels
Run Code Online (Sandbox Code Playgroud)
在这些过程之后,这是它们的样子; 重塑后的train_x;
[[[0.60399908]
[0.79763273]
[0.79763273]
...
[0.09779361]
[0.09779361]
[0.14732245]]
[[0.70386905]
[0.95101687]
[0.95101687]
...
[0.41530258]
[0.41728671]
[0.42261905]]
[[0.75008021]
[1. ]
[1. ]
...
[0.46412148]
[0.46412148]
[0.46412148]]
...
[[0.60977509]
[0.7756791 ]
[0.7756791 ]
...
[0.12725148]
[0.02755331]
[0.02755331]]
[[0.59939494]
[0.75514785]
[0.75514785]
...
[0.0391334 ]
[0.0391334 ]
[0.0578706 ]]
[[0.5786066 ]
[0.71539303]
[0.71539303]
...
[0.41355098]
[0.41355098]
[0.4112712 ]]]
Run Code Online (Sandbox Code Playgroud)
一次热编码后的train_y;
0 1 2 3 4 5
0 1 0 0 0 0 0
1 1 0 0 0 0 0
2 0 1 0 0 0 0
3 0 1 0 0 0 0
4 0 0 0 0 0 1
5 0 0 0 0 0 1
6 0 0 1 0 0 0
7 0 0 1 0 0 0
8 0 0 0 1 0 0
9 0 0 0 1 0 0
10 0 0 0 0 1 0
11 0 0 0 0 1 0
12 0 0 0 1 0 0
13 0 0 0 1 0 0
14 0 1 0 0 0 0
15 0 1 0 0 0 0
16 1 0 0 0 0 0
17 1 0 0 0 0 0
18 0 0 1 0 0 0
19 0 0 1 0 0 0
20 0 0 0 0 1 0
21 0 0 0 0 1 0
22 0 0 0 0 0 1
23 0 0 0 0 0 1
24 0 0 0 0 0 1
25 0 0 0 0 0 1
26 0 0 1 0 0 0
27 0 0 1 0 0 0
28 0 1 0 0 0 0
29 0 1 0 0 0 0
.. .. .. .. .. .. ..
282 0 0 0 1 0 0
283 0 0 0 1 0 0
284 1 0 0 0 0 0
285 1 0 0 0 0 0
286 0 0 0 0 1 0
287 0 0 0 0 1 0
288 1 0 0 0 0 0
289 1 0 0 0 0 0
290 0 1 0 0 0 0
291 0 1 0 0 0 0
292 0 0 0 1 0 0
293 0 0 0 1 0 0
294 0 0 1 0 0 0
295 0 0 1 0 0 0
296 0 0 0 0 0 1
297 0 0 0 0 0 1
298 0 0 0 0 1 0
299 0 0 0 0 1 0
300 0 0 0 1 0 0
301 0 0 0 1 0 0
302 0 0 1 0 0 0
303 0 0 1 0 0 0
304 0 0 0 0 0 1
305 0 0 0 0 0 1
306 0 1 0 0 0 0
307 0 1 0 0 0 0
308 0 0 0 0 1 0
309 0 0 0 0 1 0
310 1 0 0 0 0 0
311 1 0 0 0 0 0
[312 rows x 6 columns]
Run Code Online (Sandbox Code Playgroud)
重塑后,我已经创建了我的CNN模型;
model = Sequential()
model.add(Conv1D(100,700,activation='relu',input_shape=(18000,1))) #kernel_size is 700 because 18000 rows = 60 seconds so 700 rows = ~2.33 seconds and there is two heart beat peak in every 2 second for ecg signal.
model.add(Conv1D(50,700))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling1D(4))
model.add(Flatten())
model.add(Dense(6,activation='softmax'))
adam = keras.optimizers.Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
model.compile(optimizer = adam, loss = 'categorical_crossentropy', metrics = ['acc'])
model.fit(train_x,train_y,epochs = 50, batch_size = 32, validation_split=0.33, shuffle=False)
Run Code Online (Sandbox Code Playgroud)
问题是,准确度不会超过 0.2,而且会上下波动。看起来模型没有学到任何东西。我试图增加层数,调整学习率,改变损失函数,改变优化器,缩放数据,规范化数据,但没有任何帮助我解决这个问题。我还尝试了更简单的 Dense 模型或 LSTM 模型,但找不到有效的方法。
我怎么解决这个问题?提前致谢。
添加:
我想添加 50 个 epoch 后的训练结果;
Epoch 1/80
249/249 [==============================] - 24s 96ms/step - loss: 2.3118 - acc: 0.1406 - val_loss: 1.7989 - val_acc: 0.1587
Epoch 2/80
249/249 [==============================] - 19s 76ms/step - loss: 2.0468 - acc: 0.1647 - val_loss: 1.8605 - val_acc: 0.2222
Epoch 3/80
249/249 [==============================] - 19s 76ms/step - loss: 1.9562 - acc: 0.1767 - val_loss: 1.8203 - val_acc: 0.2063
Epoch 4/80
249/249 [==============================] - 19s 75ms/step - loss: 1.9361 - acc: 0.2169 - val_loss: 1.8033 - val_acc: 0.1905
Epoch 5/80
249/249 [==============================] - 19s 74ms/step - loss: 1.8834 - acc: 0.1847 - val_loss: 1.8198 - val_acc: 0.2222
Epoch 6/80
249/249 [==============================] - 19s 75ms/step - loss: 1.8278 - acc: 0.2410 - val_loss: 1.7961 - val_acc: 0.1905
Epoch 7/80
249/249 [==============================] - 19s 75ms/step - loss: 1.8022 - acc: 0.2450 - val_loss: 1.8092 - val_acc: 0.2063
Epoch 8/80
249/249 [==============================] - 19s 75ms/step - loss: 1.7959 - acc: 0.2369 - val_loss: 1.8005 - val_acc: 0.2222
Epoch 9/80
249/249 [==============================] - 19s 75ms/step - loss: 1.7234 - acc: 0.2610 - val_loss: 1.7871 - val_acc: 0.2381
Epoch 10/80
249/249 [==============================] - 19s 75ms/step - loss: 1.6861 - acc: 0.2972 - val_loss: 1.8017 - val_acc: 0.1905
Epoch 11/80
249/249 [==============================] - 19s 75ms/step - loss: 1.6696 - acc: 0.3173 - val_loss: 1.7878 - val_acc: 0.1905
Epoch 12/80
249/249 [==============================] - 19s 75ms/step - loss: 1.5868 - acc: 0.3655 - val_loss: 1.7771 - val_acc: 0.1270
Epoch 13/80
249/249 [==============================] - 19s 75ms/step - loss: 1.5751 - acc: 0.3936 - val_loss: 1.7818 - val_acc: 0.1270
Epoch 14/80
249/249 [==============================] - 19s 75ms/step - loss: 1.5647 - acc: 0.3735 - val_loss: 1.7733 - val_acc: 0.1429
Epoch 15/80
249/249 [==============================] - 19s 75ms/step - loss: 1.4621 - acc: 0.4177 - val_loss: 1.7759 - val_acc: 0.1270
Epoch 16/80
249/249 [==============================] - 19s 75ms/step - loss: 1.4519 - acc: 0.4498 - val_loss: 1.8005 - val_acc: 0.1746
Epoch 17/80
249/249 [==============================] - 19s 75ms/step - loss: 1.4489 - acc: 0.4378 - val_loss: 1.8020 - val_acc: 0.1270
Epoch 18/80
249/249 [==============================] - 19s 75ms/step - loss: 1.4449 - acc: 0.4297 - val_loss: 1.7852 - val_acc: 0.1587
Epoch 19/80
249/249 [==============================] - 19s 75ms/step - loss: 1.3600 - acc: 0.5301 - val_loss: 1.7922 - val_acc: 0.1429
Epoch 20/80
249/249 [==============================] - 19s 75ms/step - loss: 1.3349 - acc: 0.5422 - val_loss: 1.8061 - val_acc: 0.2222
Epoch 21/80
249/249 [==============================] - 19s 75ms/step - loss: 1.2885 - acc: 0.5622 - val_loss: 1.8235 - val_acc: 0.1746
Epoch 22/80
249/249 [==============================] - 19s 75ms/step - loss: 1.2291 - acc: 0.5823 - val_loss: 1.8173 - val_acc: 0.1905
Epoch 23/80
249/249 [==============================] - 19s 75ms/step - loss: 1.1890 - acc: 0.6506 - val_loss: 1.8293 - val_acc: 0.1905
Epoch 24/80
249/249 [==============================] - 19s 75ms/step - loss: 1.1473 - acc: 0.6627 - val_loss: 1.8274 - val_acc: 0.1746
Epoch 25/80
249/249 [==============================] - 19s 75ms/step - loss: 1.1060 - acc: 0.6747 - val_loss: 1.8142 - val_acc: 0.1587
Epoch 26/80
249/249 [==============================] - 19s 75ms/step - loss: 1.0210 - acc: 0.7510 - val_loss: 1.8126 - val_acc: 0.1905
Epoch 27/80
249/249 [==============================] - 19s 75ms/step - loss: 0.9699 - acc: 0.7631 - val_loss: 1.8094 - val_acc: 0.1746
Epoch 28/80
249/249 [==============================] - 19s 75ms/step - loss: 0.9127 - acc: 0.8193 - val_loss: 1.8012 - val_acc: 0.1746
Epoch 29/80
249/249 [==============================] - 19s 75ms/step - loss: 0.9176 - acc: 0.7871 - val_loss: 1.8371 - val_acc: 0.1746
Epoch 30/80
249/249 [==============================] - 19s 75ms/step - loss: 0.8725 - acc: 0.8233 - val_loss: 1.8215 - val_acc: 0.1587
Epoch 31/80
249/249 [==============================] - 19s 75ms/step - loss: 0.8316 - acc: 0.8514 - val_loss: 1.8010 - val_acc: 0.1429
Epoch 32/80
249/249 [==============================] - 19s 75ms/step - loss: 0.7958 - acc: 0.8474 - val_loss: 1.8594 - val_acc: 0.1270
Epoch 33/80
249/249 [==============================] - 19s 75ms/step - loss: 0.7452 - acc: 0.8795 - val_loss: 1.8260 - val_acc: 0.1587
Epoch 34/80
249/249 [==============================] - 19s 75ms/step - loss: 0.7395 - acc: 0.8916 - val_loss: 1.8191 - val_acc: 0.1587
Epoch 35/80
249/249 [==============================] - 19s 75ms/step - loss: 0.6794 - acc: 0.9357 - val_loss: 1.8344 - val_acc: 0.1429
Epoch 36/80
249/249 [==============================] - 19s 75ms/step - loss: 0.6106 - acc: 0.9357 - val_loss: 1.7903 - val_acc: 0.1111
Epoch 37/80
249/249 [==============================] - 19s 75ms/step - loss: 0.5609 - acc: 0.9598 - val_loss: 1.7882 - val_acc: 0.1429
Epoch 38/80
249/249 [==============================] - 19s 75ms/step - loss: 0.5788 - acc: 0.9478 - val_loss: 1.8036 - val_acc: 0.1905
Epoch 39/80
249/249 [==============================] - 19s 75ms/step - loss: 0.5693 - acc: 0.9398 - val_loss: 1.7712 - val_acc: 0.1746
Epoch 40/80
249/249 [==============================] - 19s 75ms/step - loss: 0.4911 - acc: 0.9598 - val_loss: 1.8497 - val_acc: 0.1429
Epoch 41/80
249/249 [==============================] - 19s 75ms/step - loss: 0.4824 - acc: 0.9518 - val_loss: 1.8105 - val_acc: 0.1429
Epoch 42/80
249/249 [==============================] - 19s 75ms/step - loss: 0.4198 - acc: 0.9759 - val_loss: 1.8332 - val_acc: 0.1111
Epoch 43/80
249/249 [==============================] - 19s 75ms/step - loss: 0.3890 - acc: 0.9880 - val_loss: 1.9316 - val_acc: 0.1111
Epoch 44/80
249/249 [==============================] - 19s 75ms/step - loss: 0.3762 - acc: 0.9920 - val_loss: 1.8333 - val_acc: 0.1746
Epoch 45/80
249/249 [==============================] - 19s 75ms/step - loss: 0.3510 - acc: 0.9880 - val_loss: 1.8090 - val_acc: 0.1587
Epoch 46/80
249/249 [==============================] - 19s 75ms/step - loss: 0.3306 - acc: 0.9880 - val_loss: 1.8230 - val_acc: 0.1587
Epoch 47/80
249/249 [==============================] - 19s 75ms/step - loss: 0.2814 - acc: 1.0000 - val_loss: 1.7843 - val_acc: 0.2222
Epoch 48/80
249/249 [==============================] - 19s 75ms/step - loss: 0.2794 - acc: 1.0000 - val_loss: 1.8147 - val_acc: 0.2063
Epoch 49/80
249/249 [==============================] - 19s 75ms/step - loss: 0.2430 - acc: 1.0000 - val_loss: 1.8488 - val_acc: 0.1587
Epoch 50/80
249/249 [==============================] - 19s 75ms/step - loss: 0.2216 - acc: 1.0000 - val_loss: 1.8215 - val_acc: 0.1587
Run Code Online (Sandbox Code Playgroud)
我建议退后几步,考虑一个更简单的方法。
基于以下...
我尝试增加层数,调整学习率,改变损失函数,改变优化器,缩放数据,规范化数据,但没有任何帮助我解决这个问题。我还尝试了更简单的 Dense 模型或 LSTM 模型,但找不到有效的方法。
听起来您对自己的数据和工具的理解不够深入……这很好,因为这是一个学习的机会。
几个问题
你有基线模型吗?您是否尝试过仅运行多项逻辑回归?如果没有,我强烈建议从那里开始。随着您增加模型的复杂性,完成制作此类模型所需的特征工程将是无价的。
你检查过阶级不平衡吗?
你为什么使用CNN?你想用卷积层完成什么?对我来说,当我构建一个视觉模型来对我衣柜里的鞋子进行分类时,我使用了几个卷积层来提取空间特征,例如边缘和曲线。
与第三个问题有关......你从哪里得到这个架构?是出自出版物吗?这是当前最先进的心电图模型吗?或者这是最容易获得的模型?有时两者并不相同。我会深入研究文献并在网络上搜索更多,以找到有关神经网络和分析心电图轨迹的更多信息。
我想如果你能回答这些问题,你就能自己解决你的问题。
归档时间: |
|
查看次数: |
2876 次 |
最近记录: |