【Transformer序列分类】Pytorch使用Transformer对一维信号进行分类

本文介绍了一个基于Transformer的程序,用于一维序列分类,包括数据预处理、模型构建(6层Encoder和全连接层)、训练与评估。程序适用于心电信号二分类,提供详细代码和数据转换指导,19元在闲鱼售卖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于Transformer序列分类,整理了两个版本,汇总在这里,源代码都挂在了闲鱼上。先介绍版本一,再介绍版本二。

版本一:只用了Encoder和全连接层,没有用Decoder和位置嵌入Embedding。

理由:参考了许多用Transformer做分类的程序,都是只用了Encoder。这也合理,因为Encoder是在做特征提取,而Decoder似乎是解码,分类时可以不用。同时考虑到序列数据不像文本那样具有语义上的位置关联,所以似乎也可以不用Embedding。经实验这种网络架构也确实达到了挺好的效果。

版本二:完整的Transformer,包含Encoder、Decoder和Embedding所有模块。

理由:总觉得只用Encoder不是完整的Transformer。参考了网上很多Transformer序列回归的代码,回归一般是Encoder和Decoder都用。然后经过考虑,改为了分类的代码。同时利用全连接做了个Embedding层,这个也合理,全连接可以起到位置嵌入的作用。

版本一:

程序旨在学习如何使用Transformer对一维序列进行分类,如何调整序列的输入格式和构建网络。

在使用此程序时,建议先大致了解Transformer框架的基本结构:

Transformer模型中有Encoder和Decoder模块。参考了许多使用Transformer做分类的程序,模型中均是只使用了Encoder模块。本程序中,使用了6层Encoder模块和最终的全连接层进行序列分类,没有使用Decoder模块和Embedding模块(Embedding模块是用于文本嵌入的,本程序数据是序列,因此不用做嵌入)。

程序工作如下:

1、加载数据,调整为模型需要的输入格式。原始数据为Excel,400条1*500的序列(心电信号),其中200条正常,200条异常。将每条1*500的信号reshape成10*50,即序列长度10*维度50。这里也可以理解成把序列看成了文本,每个样本由10个单词(序列长度10)组成,每个单词是50个数字(维度50)。这样做是为了满足Transformer的输入格式。

2、构建Transformer模型。其中包含6层的Encoder层和最终的全连接层。

3、训练、测试。显示训练集准确率和Loss变化,计算测试集Acc、Pre、Recall、F1-score,绘制混淆矩阵。

注:程序注释详细,书写规范,容易看懂。包含原始数据和代码,能直接运行,如运行遇到问题可远程帮忙调通。本程序是实现二分类,看懂后也可方便改为多分类。数据为Excel,方便替换为自己的数据,但需要大致看懂并修改程序中的数据维度转化部分和修改模型的输入维度等参数。时间关系仅解答简单问题,谢谢理解。

程序完全由本人手写,整理不易,价格14元。唯一渠道为闲鱼售卖,诚信第一,谴责其他网站高价售卖~

【闲鱼链接】:https://m.tb.cn/h.TW3NXvH?tk=hWjS3F302Ds CZ0000

如果链接失效,可在闲鱼搜索:耐心的等待5283,然后点“用户”即可找到个人主页下的程序。

c2854143d97942e180cb7177caa1f3f6.png9fe147add91e4f44a6e7abd0a086a64d.png99490e76686f4dd3b37d712a9dcfba66.png1fe16d83bcb5493fa26ff2a1a9aa49b8.png

版本二:

经过考虑后,发现也可以用上Decoder和Embedding。因此又整理了完整的Transformer版本的序列分类程序。但其实使用Decoder和Embedding的意义,个人认为不是特别大。当然,使用完整的Transformer对于写论文或者凑工作量还是非常有必要的。。。

在使用此程序时,建议先大致了解Transformer框架的基本结构:Encoder模块、Decoder模块和Embedding位置嵌入。此程序使用了所有模块,构建了完整的Transformer用于序列分类。(区别于一些只用Encoder的程序,也包括本人之前也整理过只用Encoder的程序)。

程序工作如下:

1、加载数据,调整为模型需要的输入格式。原始数据为Excel,400条1*500的序列(心电信号),其中200条正常,200条异常。将每条1*500的信号强行调整成50*10,看作序列长度50*维度10。这样做是为了满足Transformer的输入格式,这一步非常关键。按7:1:2划分训练集、验证集和测试集。

2、依次构建Encoder类、Decoder类,进而构建完整的Transformer,最终的Transformer包含4层Encoder和4层Decoder。

3、训练、测试。显示训练集Acc和Loss变化并绘图显示。计算测试集Acc、Pre、Recall、F1-score,绘制混淆矩阵。

注:本程序是实现二分类,看懂后也可方便改为多分类,类别数是可指定的一个参数。数据为Excel,方便替换为自己的数据,但需要大致看懂并修改程序中的数据维度转化部分。源程序是jupyterLab所写,建议分块运行。也整理了.py程序供PyCharm等运行。时间关系仅解答简单问题,谢谢理解。

程序完全由本人手写,整理不易,价格19元。唯一渠道为闲鱼售卖,诚信第一,谴责其他网站高价售卖~

【闲鱼链接】:https://m.tb.cn/h.Tdsg6lj?tk=sl9d3F3aLMj CZ0002

如果链接失效,可在闲鱼搜索:耐心的等待5283,然后点“用户”即可找到个人主页下的程序。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值