我正在尝试根据 EEG 连接组数据识别 3(类)心理状态。数据的shape是99x1x34x34x50x130(原来是图形数据,现在用矩阵表示),分别代表[主题、通道、高度、宽度、频率、时间序列]。为了这项研究,只能输入连接组数据的 1x34x34 图像。从之前的研究中,发现 alpha 波段(8-1 hz)提供了最多的信息,因此数据集被缩小到 99x1x34x34x4x130。先前机器学习技术(如 SVM)的测试集准确度达到了约 75% 的测试准确度。因此,目标是在给定相同数据 (1x34x34) 的情况下实现更高的精度。由于我的数据非常有限,1-66 用于训练,66-99 用于测试(固定比率和 1/3 类分布),我想沿时间序列轴(第 6 轴)拆分数据,然后将数据平均为 1x34x34 的形状(例如 1x34x34x4x10,10 是时间序列的随机样本)。这给了我大约 1500 个用于训练的样本,以及 33 个用于测试的样本(测试是固定的,类分布是 1/3)。
模型:
SimpleCNN(
(conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(drop1): Dropout(p=0.25, inplace=False)
(fc1): Linear(in_features=9248, out_features=128, bias=True)
(drop2): Dropout(p=0.5, inplace=False)
(fc2): Linear(in_features=128, out_features=3, bias=True)
)
CrossEntropyLoss()
Adam (
Parameter Group 0
amsgrad: False
betas: …
Run Code Online (Sandbox Code Playgroud) python machine-learning deep-learning conv-neural-network pytorch
我曾尝试研究我的不变损失的情况,我找到的所有答案都特定于代码。我刚刚开始学习 CNN,大部分 CNN 来自一个示例,并进行了修改以适应我的数据集的需求。我正在尝试对 ECG 的类型(正常、心房颤动、其他、嘈杂)进行分类。当我尝试训练 CNN 时,损失保持不变,我认为这是因为我的 CNN 没有学习并且只输出零。到目前为止,我已经尝试改变学习率/损失函数并没有产生任何影响。
我是在Google Colab 上这样做的,因此可以随意编辑代码,并且不要忘记将运行时选项卡下的硬件加速更改为 GPU。
代码:
import os
import cv2
import numpy as np
from tqdm import tqdm
from scipy.io import loadmat
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt
if torch.cuda.is_available():
device = torch.device("cuda:0")
print("Running on GPU -", device )
else:
device = torch.device("cpu")
print("Running on CPU -", device )
REBUILD_DATA = True # processing data
class ECG_DATA(): …
Run Code Online (Sandbox Code Playgroud)