利用ChatGPT完成深度学习分类任务
一、任务背景
关于早期诊断NEC(坏死性小肠结肠炎(Necrotizing enterocolitis,NEC))和及时干预一直是临床关注的重点和难点问题。现在手上有相关的临床数据集,我们想要根据患者的各项指标,尝试从数据角度,探索出一套隐藏在数据背后的潜在规律,帮助医生更好的诊断预防该疾病的发生。
二、任务分析
2.1 问题定位
观察数据我们能够初步发现,这是一个多特征二分类的任务,同时我们想用深度学习的方法来解决这个问题,那么让我们先听听chatgpt怎么说?
太棒了,它的回答中举的例子正好就是医学相关的案例,说明我们对问题定性的没有问题。
2.2算法选用
既然我们的问题定位已经确定了,但是关于深度学习的分类算法有那么多,到底具体的解决算法该选择哪个呢?各个算法之间的优劣又是什么呢?那就让chatgpt帮助回答一下吧!
可以看到有各式各样的算法,因为笔者正好是主要研究这个方向,有相关的知识基础,所以看的还是比较轻松,但是对于小白来说可能不免有些疑惑了。到这里确实就需要知识积累了:在提供给你众多的算法选择,究竟选择哪个最合适?这里就体现了一个程序员的自我素养和知识功底了!
哈哈哈,你是不是不服,那我帮你试一下,看看究竟它会不会真的知道哪个最合适!
看到了吧,它的回答完全是和稀泥,把各个算法又都说了一遍,就是不告诉你哪个最好,哪个最合适🤣🤣🤣,你拿它一点办法都没,这就是语言的艺术(DOGE)。
最后,因为笔者对上述的各个算法都有研究,觉得其实简单的BP网络就可以很好解决,其它的网络分别更好的适应CV、NLP的,用在这里并不会有较高的提升。所以最终我选择了简单的NN来解决问题。
2.3具体编码
好的,我们发现上个阶段,ChatGPT并没有帮助我们特别多,仅仅提供了参考意见,我们最终还是根据自身的编程经验选择了NN网络来作为本次的算法支持。那么下面,让我们看看它的动手编程能力吧!
先让他写个小demo看看效果,因为笔者更喜欢PyTorch框架,所以就选择让他用这个框架了。
写的非常好,属于非常标准的写法了,用的是一个简单的三层BP网络架构,好的,那我们初步就打算用这套代码了,现在需要自定义适配到我们的自己数据集上。
首先,我们发现,我们的数据集是xlsx文件,而它上面的例子中使用的是csv文件,来问问它怎么处理呢。
好的,已经有模有样了,但是数据标签数量还未修改,自己懒得改了,直接交给他了。
(由于代码结构相似,就不全部展示了)
接下来,感觉完事大吉了,那就Run一下吧!
糟糕,报错了!害,我就知道,不能全指望它,没有这么简单的事情。
直接把报错传给他,看看它会不会解决吧。
那就按照它说的,把数据集示例发给他看看。
好家伙,这么智能呀,完全理解了我想做的事情,甚至知道了数据集的含义,早知道上来就应该先把数据示例发给它了!这点希望大家引以为戒:上来先把自己的数据集示例发给chatgpt,可以有助于它整体的代码方向和细节!
接下来,见证神奇的事情:代码真的跑起来了!看到真的连AI代码都能运行起来,而且整体实现时间不超过半小时,我开始担心了我是否之后要失业😨!
但是跑起来是跑起来了,剩下的是专业性的错误了。发现出现了梯度爆炸,损失函数没有收敛!!!不应该呀,又去仔细看了一下代码,代码是标准的BP网络的写法呀,一时间想不到原因,那也问问它吧!
经过它这么一提示,我去仔细检查了一下数据,发现确实数据集出了问题,结果值是1和2!但是网络的输出只能是0-1,这就导致了损失值爆炸的原因,不可能收敛,于是去手动修改了数据集结果值,把2改为了0。
ok,这下又出现了超正常的情况🤣
哦对,确实欸,为了防止过拟合,Dropout层是常用的,怎么把这个都给忘了😔,看来机器确实强大啊!永远不会遗忘…
可以看到,已经在上面加入了Dropout层,丢弃概率为0.5。这下应该没问题了吧。
好家伙,更离谱了🤣
准确率直接干到了100%,作为一个经常炼丹的玩家,连大模型都从来无法拉到100%,一个简单的BP直接拉满,离大谱😅😅。那好吧,它建议用交叉验证,那就用一下吧。
发现,这个回答并没有写在我们的代码里,而是单独写了一段,应该是自己的提问有问题,还是不够详细具体,没有指明让他写到之前的代码里。这里后续就不赘述了。
写到这里,这个任务的一个简单BP网络代码+交叉验证就已经写好了,并且可以正常运行了,碰巧笔者略有忘记交叉验证这一块的内容了,那就让chatgpt扮演一下老师的角色吧!看看它是否称职。
发现,讲的还是挺全面细致的,对于那些有一定知识积累的朋友,想必看完立马就能明白了,但是对于小白来说可能还是无法深入理解。所以,总结来说,真正的知识还是得靠自己学,仅靠chatgpt无法教会你真正的原理,只能起到锦上添花的作用,不能做到一劳永逸。
最后,笔者为了增加用户的体验性,还让chatgpt给我设计了一个简单的GUI操作界面,相关的调教指令这里就不再赘述了,相信通过上面的教程,大家都知道了如何给它下命令了,这里就给大家自我发挥的空间,调教出一个专属于你的chatgpt吧!下面是我的,不断优化了很多遍,最终还不错吧。因为笔者十分十分十分(此处N项)讨厌任何前端,所以感觉能做成这样,我已经很满意了😄哈哈哈毕竟不用自己写✍。
三、个人总结
3.1 总体感觉
通过本次利用ChatGPT做了一个简单的BP分类任务,发现体验还是不错的,因为笔者本身有相关的DL学习基础,所以整体使用并未遇到任何知识性难题,对于ChatGPT给出的各项建议和专业术语,阅读起来也十分流畅。
3.2 收获心得
不得不说,一些遗忘的知识点,借助ChatGPT可以快速回顾起来,一些自己知道可以用来优化/调试的方法由于不常用导致忘记的,ChatGPT可以针对性地帮助你想到,而不用用传统浏览器搜索,往往由于问题十分宽泛以及个性化,无法在浏览器上特别快速地找到解决方法,而这点也是笔者本次感觉为什么ChatGPT太能提高生产编程效率的一点。
3.3 未来畅想
拿当下热门的话题来作结尾:ChatGPT会抢走程序员的饭碗吗?
我的回答:一定会的!就连AI程序员也会被替代吗?是的,AI程序员也难逃一劫。
但是,更具体的说,是所有低级程序员一定会被替代,只会复制粘贴的“裁缝程序员”真的危险了呀,没有真 本事,丰富的项目经验,深厚的知识储备,看来是藏不住了的。
最后送给大家一句我很喜欢的话:北京就像一座黑夜中的洗衣机,大家都在里面摸黑着漂着,多年过后天亮了,有的衣服洗的崭新亮丽,然而有的衣服却更加的褶皱不堪。