【AI达人创造营第二期】电机异音AI诊断
本项目针对电机异音AI诊断,利用飞桨平台构建模型。因人工质检易误判,项目基于振动信号,用机器学习技术实现智能检验,要求故障电机零漏检。通过复制正样本解决数据不平衡,修改损失函数,用全连接层训练。结果显示正样本全对,负样本准确率91%,可改进为卷积层并设验证集。

电机异音AI诊断
本项目为飞桨领航团AI达人创造营第二期作业。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
项目背景
在电机生产线上普遍采用人工听音的方法分辨良、次品,不仅成本高,而且重复、单调的听音工作极易引起人员疲劳,容易出现误判,若个别不良品混入整批成品中,会给工厂带来严重经济损失,甚至严重影响产品声誉。
(数据对应的比赛)本次大赛要求参赛者基于加速度传感器采集的振动信号,利用机器学习、深度学习等人工智能技术,设计智能检验的算法,要求算法对故障电机不能有漏识别,在召回100%的情况下,尽量提高预测准确率,以达到替代人工质检的目的。
数据说明
文件清单:
Motor_tain.zip:用于训练的采集数据,其中,文件夹“正样本”包含30个异常电机的数据样本,文件夹“负样本”包含500个正常电机的数据样本;Motor_testP.zip:用于测试的采集数据,包含500个电机的数据样本;文件说明:采集数据时是分别对电机正转、反转时的振动信号进行采集。也就是说每台电机有两条数据,其中F代表正转,B代表反转。每条数据包含两路振动信号,数据文件命名规则:编号_旋转方向.csv。比赛链接:http://jingsai.julyedu.com/v/25820185621432447/dataset.jhtml
项目方案
每个样本包含F和B两份csv,每个csv文件包含79999×2个数据。使用多个全连接层进行预测。使用的损失函数为交叉熵。
模型如下:
处理方案
重采样:针对数据不平衡,复制多份正向样本,从而训练时达到类别均衡采样的效果修改损失:针对题目要求的保证TP最大,尽可能减小FP的问题,将label==1的损失权重设定为1.1。代码
预处理
In [1]! unzip -oq data/data31822/Motor_tain.zip! unzip -oq data/data31822/Motor_testP.zip登录后复制 In [31]
import ostrain_pos_dir='Motor_tain/╒¤╤∙▒╛/'train_neg_dir='Motor_tain/╕║╤∙▒╛/'# 生成三份文件便于按照类别比例划分with open('train_pos.txt','w') as f: for item in list(set([item[:len(item)-6] for item in os.listdir(train_pos_dir)])): if '.ipynb' not in item: f.write(train_pos_dir+item+'\t1\n')with open('train_neg.txt','w') as f: for item in list(set([item[:len(item)-6] for item in os.listdir(train_neg_dir)])): if '.ipynb' not in item: f.write(train_neg_dir+item+'\t0\n')with open('train.txt','w') as f: for item in list(set([item[:len(item)-6] for item in os.listdir(train_pos_dir)])): if '.ipynb' not in item: for i in range(int(500/30)): f.write(train_pos_dir+item+'\t1\n') for item in list(set([item[:len(item)-6] for item in os.listdir(train_neg_dir)])): if '.ipynb' not in item: f.write(train_neg_dir+item+'\t0\n')登录后复制 构造读取器
In [33]import paddleimport numpy as npimport paddle.vision.transforms as Tfrom PIL import Imageimport pandas as pdclass MyDateset(paddle.io.Dataset): def __init__(self,txt_dir): super(MyDateset, self).__init__() self.path=[] self.label=[] with open(txt_dir,'r') as f: for line in f.readlines(): self.path.append(line.split('\t')[0]) self.label.append(line.split('\t')[1][0]) def __getitem__(self, index): path = self.path[index] label = int(self.label[index]) F=pd.read_csv(path+'_F.csv') B=pd.read_csv(path+'_B.csv') F=paddle.to_tensor(F.values).flatten(0).astype('float32') B=paddle.to_tensor(B.values).flatten(0).astype('float32') label = np.array(label).astype('int64') return F,B,label def __len__(self): return len(self.label)登录后复制 In [34]train_dataset=MyDateset('train.txt')train_dataloader = paddle.io.DataLoader( train_dataset, batch_size=16, shuffle=True, drop_last=False)for step, data in enumerate(train_dataloader): F, B, label = data print(step, F.shape, B.shape, label.shape) break登录后复制 0 [16, 159998] [16, 159998] [16]登录后复制
构造网络模型
In [35]class MyNet(paddle.nn.Layer): def __init__(self): super(MyNet,self).__init__() self.fc_F = paddle.nn.Linear(in_features=159998, out_features=2000) self.fc_B = paddle.nn.Linear(in_features=159998, out_features=2000) self.fc_1 = paddle.nn.Linear(in_features=4000, out_features=1000) self.fc_2 = paddle.nn.Linear(in_features=1000, out_features=200) self.fc_3 = paddle.nn.Linear(in_features=200, out_features=2) def forward(self,F,B): F = self.fc_F(F) B = self.fc_B(B) x = paddle.concat([F,B],axis=-1) x = self.fc_1(x) # x = paddle.nn.functional.relu(x) x = self.fc_2(x) # x = paddle.nn.functional.relu(x) x = self.fc_3(x) return x登录后复制
训练
In [38]model = MyNet()model.train()max_epoch=10opt = paddle.optimizer.SGD(learning_rate=0.001, parameters=model.parameters())now_step=0for epoch in range(max_epoch): for step, data in enumerate(train_dataloader): now_step+=1 F, B, label = data pre = model(F,B) loss = paddle.nn.functional.cross_entropy(pre,label,weight=paddle.to_tensor([1,1.1]),reduction='mean') loss.backward() opt.step() opt.clear_gradients() if now_step%100==0: print("epoch: {}, batch: {}, loss is: {}".format(epoch, step, loss.mean().numpy()))paddle.save(model.state_dict(), 'model.pdparams')登录后复制 epoch: 1, batch: 37, loss is: [0.631444]epoch: 3, batch: 13, loss is: [0.63104683]epoch: 4, batch: 51, loss is: [0.63319224]epoch: 6, batch: 27, loss is: [0.5660453]epoch: 8, batch: 3, loss is: [0.5968682]epoch: 9, batch: 41, loss is: [0.5927209]登录后复制
查看混淆矩阵
格式为
In [39]# mydict = paddle.load("model_1.pdparams")# model.set_state_dict(mydict)record=np.zeros([2,2])for i in range(len(train_dataset)): F,B,label=train_dataset[i] pre=model(F,B) # print(f'real label: {label} pre label: {np.argmax(pre.numpy())}') record[label.tolist()][np.argmax(pre.numpy())]+=1record登录后复制 array([[455., 45.], [ 0., 480.]])登录后复制
总结
本项目使用了极简方式构造了一个电机异音AI诊断模型,最终结果表明模型可以将全部正样本(异常)都判断正确,并且负样本的占比为9%。除去模型效果的因素外,本项目有以下不足,可以继续改进:
本项目构造了一个简单的全连接层网络模型,但由于数据量较大,需要在第一个全连接层尽可能地压缩节点数。可以尝试使用卷积替换全连接层。由于样本量较少(正向样本仅30个),仅设置了训练集,没有设定验证集。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
阿里千问 AI 眼镜接入蚂蚁 GPASS:语音解锁共享单车、停车缴费
当AI眼镜学会“跑腿”:语音解锁单车,无感支付停车费 近来,智能穿戴领域的一个新动向值得关注:阿里旗下的千问AI眼镜,正式接入了蚂蚁集团的GPASS平台。这可不是一次简单的功能叠加,它意味着,诸如共享单车骑行、停车缴费这一系列高频的“AI办事”功能,开始从手机屏幕转移到了你的眼前。 简单说,借助GP
Workbuddy注册额外积分
角色定位与核心任务目标 明确了基本定位后,我们直接切入核心:作为一名专业的文章优化师,我的核心职责在于,将那些带有明显AI生成特征的文本,深度重塑为拥有个人特色与行业洞见的优质内容。 换句话说,这项任务的关键在于实施一次“精准的换血手术”。你必须严格保证原文所有的事实依据、核心观点、逻辑框架,以及每
我把 Anthropic 的 Harness 工程思想做成了一个 Skill
用AI写代码,难在哪儿? 用AI生成代码本身并不难,真正的挑战在于让它稳定地交付一个真正可用的东西。这篇文章,我们就来聊聊Anthropic工程团队是如何破解这个难题的,以及我如何将这套方法论落地成了一个可以复用的实战工具。 用 AI 写代码有多难?不是写不出来难,是让它稳定交付可用的东西很难。这篇
沃尔玛、塔吉特等美国零售巨头拥抱 AI,明确用户需为购物助手出错担责
美国零售巨头拥抱AI新玩法:功能归我,风险归你? 最近有件事挺有意思,美国那边的大型零售商们,正铆足了劲把AI往购物流程里塞。但你猜怎么着?一旦AI捅了娄子,买单的却很可能变成了消费者自己。 这不,就在当地时间4月5号,外媒Futurism的一篇报道就点破了这个现象。企业们一边热火朝天地推广AI功能
小米物流大件“当日达”服务上线 50 城
小米物流大家电“当日达”实现全国50城覆盖,上午11点前下单最快当日送达 对于大家电配送时效长的普遍困扰,小米物流带来了全新的解决方案。最新消息显示,小米旗下大件商品的“当日达”服务范围已成功拓展至全国50座重点城市。除了北京、上海、广州、深圳、杭州、成都等一线与新一线核心城市外,此次升级还囊括了天
- 日榜
- 周榜
- 月榜
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

